urllib2 не получает весь HTTP-ответ

Я недоумеваю, почему я не могу загрузить все содержимое некоторых ответов JSON от FriendFeed с помощью 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' 

Как получить полный ответ с помощью urllib2?

4 Solutions collect form web for “urllib2 не получает весь HTTP-ответ”

Лучший способ получить все данные:

 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 

Причина в том, что .read() не гарантированно возвращает весь ответ, учитывая природу сокетов. Я думал, что это обсуждалось в документации (возможно, urllib ), но я не могу ее найти.

Используйте tcpdump (или что-то вроде этого) для мониторинга реальных сетевых взаимодействий – тогда вы можете проанализировать, почему сайт поврежден для некоторых клиентских библиотек. Убедитесь, что вы повторяете несколько раз, создавая сценарий теста, чтобы вы могли понять, совместима ли проблема:

 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 

Работа сайта для меня постоянно, поэтому я не могу привести примеры обнаружения сбоев 🙂

Продолжайте вызывать stream.read (), пока это не будет выполнено …

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

также работает

  • Напишите файл PDF из URL-адреса, используя urllib2
  • Python `urllib2`: Почему я получаю ошибку 403, когда я` urlopen` на странице Википедии?
  • Мониторинг прогресса по протоколу urllib2
  • urllib2 Ошибка HTTP 400: неверный запрос
  • Python Механизировать, чтобы проверить, доступен ли сервер
  • Как исправить ImportError: нет модуля с именем packages.urllib3?
  • python: urllib2 как отправить cookie с запросом urlopen
  • Python urllib над TOR?
  • Python - лучший язык программирования в мире.