Hat jemand Erfahrung mit der folgenden Ausnahme bei der Verwendung von GAE Urlfetch?GoogleAppEngine Urlfetch Timeout Ausnahme
DownloadError: ApplicationError: 2 timed out
Ich versuche, eine HTTP-POST-Anfrage zu senden. Wie so:
result = urlfetch.fetch('http://api.nathan.com:8080/Obj/',
method='POST',
payload=postdata,
deadline=10)
Ich habe versucht, Frist bis zum Maximum (10 Sekunden) einzustellen. Die Anfrage von der Kommandozeile (mit curl oder httplib2) dauert ungefähr eine Sekunde.
[email protected] ~ $ time curl
-d "<Obj><a>1</a><b>n</b></Obj>"
http://api.nathan.com:8080/Obj/
agd1c2VyYXBpcgoLEgRTZXNzGAIM #< key returned by call
real 0m1.109s
user 0m0.003s
sys 0m0.009s
Hier ist die Ausgabe von dem Entwickler appserver für die curl Anfrage (Ich verwende appengine-rest-Server):
INFO __init__.py:819] adding models from module __main__
INFO __init__.py:867] added model Obj with type <class '__main__.Obj'>
INFO dev_appserver.py:3243] "POST /Obj HTTP/1.1" 200 -
INFO dev_appserver_index.py:205] Updating /path/to/index.yaml
Hier ist der Ausgang, wenn ich versuche urlfetch zu verwenden:
ERROR __init__.py:388] ApplicationError: 2 timed out
Traceback (most recent call last):
File "/path/to/webapp/__init__.py", line 507, in __call__
handler.get(*groups)
File "/path/to/myapp/main.py", line 62, in get
result = urlfetch.fetch(...)
File "/path/to/urlfetch.py", line 241, in fetch
return rpc.get_result()
File "/path/to/apiproxy_stub_map.py", line 501, in get_result
return self.__get_result_hook(self)
File "/path/to/urlfetch.py", line 325, in _get_fetch_result
raise DownloadError(str(err))
DownloadError: ApplicationError: 2 timed out
INFO dev_appserver.py:3243] "GET/HTTP/1.1" 500 -
INFO dev_appserver.py:3243] "POST /Obj/ HTTP/1.1" 200 -
Meine aktuelle Problemumgehung besteht darin, den Aufruf von urlfetch in einen Test/Except-Pass-Block zu verpacken. – nafe
Können Sie während dieses Anrufs sehen, was auf dem Server passiert? Verarbeitet es die Payload korrekt und gibt den Schlüssel zurück? Ist der Wert in postdata, was Sie denken, dass es ist? –
Hallo Alex, der Server bekommt die POST-Anfrage und es erstellt ein neues Obj basierend auf dem Anruf. – nafe