更新
App Engine SDK 1.9.24于 2015 年 7 月 20 日发布,因此如果您仍然遇到此问题,您应该可以通过更新来解决此问题。有关确切问题和解决方案的解释,请参阅下面的 +jpatokal 答案。
原始问题
我有一个正在使用的应用程序,在本地开发时遇到了麻烦。
我们有一些共享代码可以使用urllib2.urlopen
. 当我在本地开发时,我的应用程序上的 404 被拒绝,该应用程序从 AppEngine 发出请求,但请求从终端成功成功。
我在端口上运行 appengine localhost:8000
,并且在身份验证服务器上运行localhost:8001
import urllib2
url = "http://localhost:8001/api/CheckAuthentication/?__client_id=dev&token=c7jl2y3smhzzqabhxnzrlyq5r5sdyjr8&username=amadison&__signature=6IXnj08bAnKoIBvJQUuBG8O1kBuBCWS8655s3DpBQIE="
try:
r = urllib2.urlopen(url)
print(r.geturl())
print(r.read())
except urllib2.HTTPError as e:
print("got error: {} - {}".format(e.code, e.reason))
这导致got error: 404 - Not Found
来自 AppEngine
看来 AppEngine 正在将架构、主机和端口添加到我尝试访问的 url 的 PATH 部分,因为这是我在身份验证服务器上看到的:
[02/Jul/2015 16:54:16] "GET http://localhost:8001/api/CheckAuthentication/?__client_id=dev&token=c7jl2y3smhzzqabhxnzrlyq5r5sdyjr8&username=amadison&__signature=6IXnj08bAnKoIBvJQUuBG8O1kBuBCWS8655s3DpBQIE= HTTP/1.1" 404 10146
从请求标头中我们可以看到整个方案以及主机和端口作为路径的一部分被传递(下面的标头部分):
'HTTP_HOST': 'localhost:8001',
'PATH_INFO': u'http://localhost:8001/api/CheckAuthentication/',
'SERVER_PORT': '8001',
'SERVER_PROTOCOL': 'HTTP/1.1',
有什么方法可以不让 AppEngine Dev 服务器将此请求劫持到不同端口上的 localhost?还是我没有误解正在发生的事情?在我们的域不同的生产环境中一切正常。
在此先感谢您提供的任何帮助,帮助我指明正确的方向。