当 URL 包含空格时,为啥 urlfetch 会得到 status:400?

Posted

技术标签:

【中文标题】当 URL 包含空格时,为啥 urlfetch 会得到 status:400?【英文标题】: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 错误?如何克服?

【问题讨论】:

我接受除了escape the request path in the url之外别无他法。谢谢大家帮助我。 【参考方案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 错误页面。

以上是关于当 URL 包含空格时,为啥 urlfetch 会得到 status:400?的主要内容,如果未能解决你的问题,请参考以下文章

触发函数时无法 UrlFetch

为啥当我在 cfoutput 中调用函数时,ColdFusion 会添加空格?

“获取时超时” URLFetch GAE/J

UrlFetch失败,因为过多的流量被发送到指定的URL

urlencode进行转换后 为啥空格是+号 不是%20

Jquery的序列化方法为啥要把空格替换成加号