Python demande.exception.ConnectionError: connexion interrompue " BadStatusLine"

j'essaie d'utiliser le module Python requests pour lancer des commandes Http GET pour accéder à des API basées sur REST. Les urls fonctionnent très bien sur un RESTClient mais quand j'utilise la même url en python, j'obtiens une erreur de connexion.

Le code que j'essaie d'exécuter est:

payload={"mac":new_mac,"token":token}
userloginurl="http://192.168.1.40:9119/uid"
r=requests.get(userloginurl,params=payload)
print(r.url)

si je teste cette url en utilisant RESTClient, j'obtiens un code D'état de 200 OK dans l'en-tête de réponse avec quelques autres champs. enter image description here Mais cela ne fonctionne pas avec les requêtes python. Le traceback de l'erreur est indiqué ci-dessous:

Traceback (most recent call last):
File "getAPids.py", line 34, in <module>
r=requests.get(userloginurl,params=payload)
  File "C:Usersgarvitabpythonlibsite-packagesrequestsapi.py", line 65, in
 get
return request('get', url, **kwargs)
File "C:Usersgarvitabpythonlibsite-packagesrequestsapi.py", line 49, in
request
response = session.request(method=method, url=url, **kwargs)
File "C:Usersgarvitabpythonlibsite-packagesrequestssessions.py", line 4
61, in request
resp = self.send(prep, **send_kwargs)
File "C:Usersgarvitabpythonlibsite-packagesrequestssessions.py", line 5
73, in send
r = adapter.send(request, **kwargs)
 File "C:Usersgarvitabpythonlibsite-packagesrequestsadapters.py", line 4
15, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",
))

j'ai cherché la cause du problème. Il est possible que la réponse reçue ne soit pas formatée correctement. Est-il un moyen de gérer ce problème?

Merci à l'avance.

19
demandé sur BajajG 2015-02-17 11:18:22

2 réponses

Le problème était avec l'url. Cette connexion devait être établie sur https et j'utilisais http dans le script python. D'où la question.

22
répondu BajajG 2015-02-17 14:54:05

avez-vous vérifié, qu'est-ce qui est envoyé par télégramme? Je suppose que vous pourriez avoir à convertir votre dictionnaire à une chaîne JSON par vous-même, ou utiliser le json= mot clé au lieu de payload=. Voir http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers pour plus de détails. Cela peut faire l'affaire:

import json
payload = json.dumps({"mac":new_mac,"token":token})
userloginurl = "http://192.168.1.40:9119/uid"
r = requests.get(userloginurl, data=payload)
print(r.url)
3
répondu Michael 2015-02-17 08:52:18