Question

Je ne comprends pas pourquoi je ne parviens pas à télécharger l'intégralité du contenu de certaines réponses JSON à partir de FriendFeed . en utilisant urllib2 .

>>> import urllib2
>>> stream = urllib2.urlopen('http://friendfeed.com/api/room/the-life-scientists/profile?format=json')
>>> stream.headers['content-length']
'168928'
>>> data = stream.read()
>>> len(data)
61058
>>> # We can see here that I did not retrieve the full JSON
... # given that the stream doesn't end with a closing }
... 
>>> data[-40:]
'ce2-003048343a40","name":"Vincent Racani'

Comment puis-je récupérer la réponse complète avec urllib2?

Était-ce utile?

La solution

Meilleur moyen d'obtenir toutes les données:

fp = urllib2.urlopen("http://www.example.com/index.cfm")

response = ""
while 1:
    data = fp.read()
    if not data:         # This might need to be    if data == "":   -- can't remember
        break
    response += data

print response

La raison en est que .read () ne garantit pas le retour de la réponse complète, compte tenu de la nature des sockets. Je pensais que cela avait été discuté dans la documentation (peut-être urllib ) mais je ne le trouve pas.

Autres conseils

Utilisez tcpdump (ou quelque chose du genre) pour surveiller les interactions réseau réelles. Vous pouvez ensuite analyser pourquoi le site est cassé pour certaines bibliothèques clientes. Assurez-vous de répéter plusieurs fois en écrivant le test sur le script afin de voir si le problème est cohérent:

import urllib2
url = 'http://friendfeed.com/api/room/friendfeed-feedback/profile?format=json'
stream = urllib2.urlopen(url)
expected = int(stream.headers['content-length'])
data = stream.read()
datalen = len(data)
print expected, datalen, expected == datalen

Le site fonctionne régulièrement pour moi, donc je ne peux pas donner d'exemples d'échecs de recherche:)

Continuez à appeler stream.read () jusqu'à la fin ...

while data = stream.read() :
    ... do stuff with data
readlines() 

fonctionne également

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top