Я пишу приложение Python, которое запрашивает API социальных сетей через cURL. Большинство различных запросов, которые я запрашиваю (Google+, Reddit, Twitter, Facebook и другие), жалуются cURL:
дополнительный материал не тонкий transfer.c: 1037: 0 0
Необычно, что при первом запуске приложения каждый ответ службы будет выдавать эту строку один или два раза. Через несколько минут линия появится несколько раз. Очевидно, что cURL идентифицирует то, что ему не нравится. Примерно через полчаса серверы начинают тайм-аут, и эта линия повторяется много десятков раз, поэтому она показывает реальную проблему.
Как я могу диагностировать это? Я попытался использовать Wireshark для захвата заголовков запросов и ответов для поиска аномалий, которые могут вызвать жалобу cURL, но для всей сложности Wireshark не существует способа изолировать и отображать только заголовки.
Вот соответствующая часть кода:
output = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0')
c.setopt(c.WRITEFUNCTION, output.write)
c.setopt(c.CONNECTTIMEOUT, 10)
c.setopt(c.TIMEOUT, 15)
c.setopt(c.FAILONERROR, True)
c.setopt(c.NOSIGNAL, 1)
try:
c.perform()
toReturn = output.getvalue()
output.close()
return toReturn
except pycurl.error, error:
errno, errstr = error
print 'The following cURL error occurred: ', errstr