当 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?的主要内容,如果未能解决你的问题,请参考以下文章