2017-04-19 2 views
0

Je le code suivant:Conversion d'une demande HTTP POST à ​​une tornade demande après

import requests 
s = requests.Session() 
r = s.post(AUTHENTICATION_URI, data=form_data, headers=headers) 

où form_data et en-têtes sont des dictionnaires d'entrées. Cela retourne correctement avec un statut de 200 en utilisant les requêtes et est correct (je suis capable d'utiliser la session plus tard dans mon code).

Je tente de convertir cette option pour utiliser une tornade et son client http, mais quand je lance ceci:

from urllib.parse import urlencode 
from tornado import httpclient 
http_client = httpclient.HTTPClient() 

response = http_client.fetch(
    httpclient.HTTPRequest(
    AUTHENTICATION_URI, method='POST', request_timeout=60, body=urlencode(form_data), headers=headers)) 

Je suis en cours d'exécution dans un délai d'attente:

tornado.httpclient.HTTPError: HTTP 599: Timeout during request 

La tornade HTTPRequest objet a un paramètre optionnel timeout, mais même faire 60 secondes ne semble pas résoudre le problème.

Que dois-je faire différemment dans la façon dont je construis la demande de publication de tornade afin de recréer comment je l'exécutais en utilisant le module http de demandes?

Répondre

0

http_client.fetch ne retourne pas response, il renvoie une Future qui résout une réponse. Vous devez l'appeler dans une fonction async def avec response = await http_client.fetch(...). Vous devez également avoir démarré le IOLoop et ne rien faire pour le bloquer. Si rien de tout cela ne vous indique la bonne direction, vous devrez partager un exemple de code plus complet.