J'utilise une commande requests.get
pour récupérer des données à partir d'un point final URL/REST. Les données sont supposées être au format JSON. Quand j'accède à l'URL à partir d'un navigateur, il a le formatage que vous attendez, à savoir [{"variable1":value,"variable2":value}]
. Toutefois, lorsque j'utilise la commande requests.get
pour récupérer les données, les données renvoyées sont décomposées et incluent des lignes de valeurs supplémentaires, qui semblent être des hexadécimaux représentant le nombre de caractères de la ligne suivante. Voici un exemple de ce que response.text
renvoie.Python Requests.Get réponse inclut des valeurs inattendues
2000
[{"variable1":v
2000
alue,"variable2
1ecd
":value}]
0
2000 base 16 = 8192 base 10, ce qui signifie qu'il y a 8 192 caractères sur la ligne suivante. Notez que dans l'exemple ci-dessus, j'ai intentionnellement raccourci les lignes pour ne pas montrer 8 192 caractères :).
Inutile de dire que cela ne respecte pas le format JSON, donc je ne peux pas le traiter comme prévu. Des pensées sur pourquoi cela peut se produire? Je pense qu'il était que peut-être quelque chose à voir avec la taille de la réponse reçue - len(response.content)
indique qu'il est 335,898 octets de taille - alors j'ai essayé Chunking la réponse comme décrit here, mais cela n'a pas affecté la production de response.text
. Appréciez les gens peuvent partager des pensées :)
EDIT1: Running print(response.json())
donne l'erreur ci-dessous:
Traceback (most recent call last):
File "IncomingMessagesCompanyIDEvent.py", line 105, in <module>
data = getData()
File "IncomingMessagesCompanyIDEvent.py", line 65, in getData
text_file.write(response.json())
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\site-packages\requests\models.py", line 858, in json
self.content.decode(encoding), **kwargs
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 6)
EDIT2: Problème résolu. Voir ci-dessous pour ma réponse.
Voir la modification à mon post original. Je suppose que cette erreur est due au fait que la réponse reçue de la commande GET n'est pas au format JSON. – skyfx
Pouvez-vous filtrer les éléments non-json en utilisant 'response.iter_lines()'? – cullywest
Malheureusement, le problème n'est pas uniquement lié aux éléments non-json, mais au fait que les données sont réparties sur plusieurs lignes. J'ai mis à jour l'exemple dans mon post original pour refléter cela. – skyfx