【问题标题】:why is urlfetch getting status:400 when URLs contain spaces?当 URL 包含空格时,为什么 urlfetch 会得到 status:400?
【发布时间】:2013-06-12 20:44:05
【问题描述】:
class Crawl(webapp2.RequestHandler):    
    def get(self):      
            from google.appengine.api import urlfetch
            url = "http://www.example.com/path/to a/page" #URL with a space
            result = urlfetch.fetch(url)
            self.response.write('url: %s' % (result.status_code)) ## Outputs 400
            self.response.write(content) # Gives me 400 error page

我们不能否认有数以千计的 URL 包含空格这一事实。我们无法一一纠正。

为什么 urlfetch 对于这种可以通过浏览器完全访问的 URL 得到 400 bad request 错误?如何克服?

【问题讨论】:

标签: python google-app-engine url urlfetch http-status-code-400


【解决方案1】:

这是因为 URL 需要正确编码(如下所述)。确保任何带有空格的 url 都用 %20 代替任何空格正确编码。

【讨论】:

  • 我也尝试了那个 url,除了我刚刚在我自己的网站上创建的一个,我似乎仍然收到 200 的响应代码。你使用的是什么 GAE SDK 版本? (不确定这是否会影响它,只是想知道我们是否在同一平台上进行测试。)
  • 是的,我用你链接的那个和natecollings.com/blah%20123.html(我刚做的)试过了。
  • 上周我下载了SDK。必须是最新版本。
  • 12日发布了1.8.1,但不管怎样,我认为这不会影响它。 (否则,我认为以前会有更多关于相同问题的问题。)您是否使用我上面的确切代码尝试过,看看您得到了什么?
  • 我是这样检查的:self.response.write(result.content) 它给了我 Google 的 400 错误页面。
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2011-11-14
  • 2014-05-23
相关资源
最近更新 更多