IncompleteRead с использованием httplib

У меня возникла постоянная проблема с получением RSS-канала с определенного веб-сайта. Я закончил писать довольно уродливую процедуру для выполнения этой функции, но мне любопытно, почему это происходит и правильно ли все интерфейсы более высокого уровня справляются с этой проблемой. Эта проблема нене правда шоу шоу, так как я неМне нужно получать корм очень часто.

Я прочитал решение, которое перехватывает исключение и возвращает частичное содержимое, однако, поскольку неполное чтение отличается по количеству фактически извлеченных байтов, я не уверен, что такое решение действительно будет работать.

#!/usr/bin/env python
import os
import sys
import feedparser
from mechanize import Browser
import requests
import urllib2
from httplib import IncompleteRead

url = 'http://hattiesburg.legistar.com/Feed.ashx?M=Calendar&ID=543375&GUID=83d4a09c-6b40-4300-a04b-f88884048d49&Mode=2013&Title=City+of+Hattiesburg%2c+MS+-+Calendar+(2013)'

content = feedparser.parse(url)
if 'bozo_exception' in content:
    print content['bozo_exception']
else:
    print "Success!!"
    sys.exit(0)

print "If you see this, please tell me what happened."

# try using mechanize
b = Browser()
r = b.open(url)
try:
    r.read()
except IncompleteRead, e:
    print "IncompleteRead using mechanize", e

# try using urllib2
r = urllib2.urlopen(url)
try:
    r.read()
except IncompleteRead, e:
    print "IncompleteRead using urllib2", e


# try using requests
try:
    r = requests.request('GET', url)
except IncompleteRead, e:
    print "IncompleteRead using requests", e

# this function is old and I categorized it as ...
# "at least it works darnnit!", but I would really like to 
# learn what's happening.  Please help me put this function into
# eternal rest.
def get_rss_feed(url):
    response = urllib2.urlopen(url)
    read_it = True
    content = ''
    while read_it:
        try:
            content += response.read(1)
        except IncompleteRead:
            read_it = False
    return content, response.info()


content, info = get_rss_feed(url)

feed = feedparser.parse(content)

Как уже говорилось, это неЭто критическая проблема, но все же любопытство, поскольку, хотя я могу ожидать, что urllib2 будет иметь эту проблему, я удивлен, что эта ошибка встречается и в механизации, и в запросах. Модуль feedparser недаже не выдает ошибку, поэтому проверка на наличие ошибок зависит от наличия 'bozo_exception» ключ.

Редактировать: я просто хотел упомянуть, что и wget, и curl выполняют функцию безупречно, каждый раз корректно извлекая всю полезную нагрузку. Я еще не нашел чистого метода Python для работы, за исключением моего уродливого хака, и мне очень любопытно узнать, что происходит на бэкэнде httplib. Я решил попробовать это с твилом на днях и получил ту же ошибку httplib.

Постскриптум Есть одна вещь, которая также кажется мне очень странной. IncompleteRead происходит последовательно в одной из двух точек останова в полезной нагрузке. Кажется, что feedparser и запросы перестают работать после чтения 926 байтов, но механизация и urllib2 завершаются неудачно после чтения 1854 байтов. Такое поведение является последовательным, и я остаюсь без объяснения или понимания.

Ответы на вопрос(3)

Ваш ответ на вопрос