web-dev-qa-db-fra.com

Python requests.exception.ConnectionError: la connexion a été interrompue "BadStatusLine"

J'essaie d'utiliser le module Python demande à émettre des commandes Http GET pour accéder à certaines API REST. Les URL fonctionnent correctement sur un RESTClient, mais lorsque je utiliser la même URL en python, je reçois une erreur de connexion.

Le code que j'essaye 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 à l'aide de RESTClient, j'obtiens un code d'état 200 OK dans l'en-tête de la réponse, ainsi que d'autres champs. enter image description here Mais cela ne fonctionne pas avec les requêtes python. Le suivi de l'erreur est présenté ci-dessous:

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

J'ai recherché la cause du problème. La réponse reçue n'est peut-être pas formatée correctement. Y a-t-il un moyen de gérer ce problème?

Merci d'avance.

25
BajajG

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

28
BajajG

Avez-vous réellement vérifié, qu'est-ce qui est envoyé sur le fil? Je suppose que vous devrez peut-être convertir vous-même votre dictionnaire en chaîne JSON 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
Michael