UPDATE
App Engine SDK 1.9.24 был выпущен 20 июля 2015 года, поэтому, если вы все еще испытываете это, вы должны иметь возможность исправить это просто путем обновления. См. + Jpatokal ответ ниже для объяснения точной проблемы и решения.
Оригинальный вопрос
У меня есть приложение, с которым я работаю и сталкиваюсь с проблемами при разработке локально.
У нас есть общий код, который проверяет сервер auth для наших приложений с помощью urllib2.urlopen
. Когда я разрабатываю локально, меня отклоняют с помощью 404 в моем приложении, которое делает запрос из AppEngine, но запрос успешно завершен с терминала.
У меня appengine работает на порту localhost:8000
, а сервер auth на 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 добавляет схему, хост и порт в часть PATH URL-адреса, которую я пытаюсь нажать, так как это то, что я вижу на сервере auth:
[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 на другом порту? Или я не понимаю, что происходит? Все работает отлично в производстве, где наши домены разные.
Заранее благодарим за помощь, помогающую указать мне в правильном направлении.