App Engine URLFetch 问题

0 投票
2 回答
1831 浏览
提问于 2025-04-17 01:49

我正在尝试从应用引擎使用urlfetch请求这个网址:https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=[http://www.my-website.dk/]&key=[my-key],但是没有成功。

当我直接把网址写死在请求里,比如这样:https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=http://www.my-website.dk/&key=[my-key],这个请求就能正常工作。但是当我用urlfetch.fetch("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=%s&key=[my-key]", "http://www.my-website.dk")时,就不行了。我还尝试了:

page_content = urlfetch.fetch(
        url="https://www.googleapis.com/pagespeedonline/v1/runPagespeed",
        payload=params,
        method=urlfetch.GET
      )

然后像这样在请求的负载中传递参数:

params = urllib.urlencode({
        "url": page.link,
        "key": "[my-key]"
      })

但结果还是一样,依然不行,服务返回了HTTP状态码400。我还尝试过添加urlfetch.fetch(u("http://...", page.link),但结果还是一样。

我根据systempuntoout的回复修改了代码,以防有人遇到同样的问题:

params = urllib.urlencode({
        "url": page.link,
        "key": "AIzaSyAFpm6W_OmjQl33JC98mAPkvrdGmrR0i4Y"
      })

      page_content = urlfetch.fetch("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?%s" % params)

2 个回答

0

payload 只适用于 POST 或 PUT 请求。对于 GET 请求,你的参数需要放在网址里。

2

首先,urlfetch这个调用出错了,因为你给这个函数传了两个参数。
你应该在这两个字符串之间用%,这样才能只传一个网址参数给这个函数。

urlfetch.fetch("https://www.goo..e/v1/runPagespeed?url=%s&key=[my-key]" %
                                               "http://www.my-website.dk")

然后,你有没有试过对第二个网址进行urlencode处理呢?

import urllib
your_url = {'url': 'http://www.my-website.dk/&key=[my-key]'}
urlfetch.fetch("https://www.g../v1/runPagespeed?%s" % urllib.urlencode(your_url))

撰写回答