2012-07-04 6 views
2

Je fais une requête en python en utilisant pycurl vers une URL qui renvoie une réponse au format json raisonnablement grande. Quand je vais à l'URL dans un navigateur, je vois tout le contenu, mais si j'utilise pycurl et j'imprime les données reçues, je ne vois que la moitié de ce que je vois quand je navigue vers l'URL, et j'obtiens une erreur d'analyse des données en utilisant la bibliothèque JSON indiquant:pycurl n'obtenant qu'une partie de la réponse

ValueError: Unterminated string starting at: line 1 column 16078 (char 16078)

la demande de pycurl est la suivante:

conn = pycurl.Curl() 
conn.setopt(pycurl.URL, myUrl) 
conn.setopt(pycurl.WRITEFUNCTION, on_receive) 
conn.setopt(pycurl.CONNECTTIMEOUT, 30) 
conn.setopt(pycurl.TIMEOUT, 30) 
conn.setopt(pycurl.NOSIGNAL, 10) 
conn.perform() 

avec la fonction on_receive en cours d'impression uniquement les données.

Est-ce que quelqu'un sait pourquoi je reçois seulement une partie de la réponse? J'ai utilisé des délais d'attente massifs juste pour essayer de résoudre ce problème. Au départ, je n'avais spécifié aucun délai d'attente, mais je recevais toujours cette erreur.

Répondre

1

dans pycurl, vous pouvez définir cela,

import pycurl 
pycurl.CONTENT_LENGTH_DOWNLOAD 

essayez d'utiliser

import Curl, pycurl 
con = Curl() 
con.set_option(pycurl.CONTENT_LENGTH_DOWNLOAD, 9999999999) 
con.get('url' .... 

aussi essayer suivante jusqu'à ce qu'il fonctionne:

pycurl.SIZE_DOWNLOAD 
pycurl.REQUEST_SIZE 
0

Vous pouvez essayer d'accéder à ces données JSON avec l'outil de boucle.
Lorsque vous êtes en mesure d'obtenir des données, traduisez simplement les options curl en options pycurl.

curl --help | less