Есть ли способ загрузить с URL-адреса и сохранить каждый отдельный фрагмент, когда он возвращается с сервера, чтобы разделить файл на анализ?
У меня проблема, когда я думаю, что сервер рубит конец выхода json, но компания, с которой мы получаем ответы, говорит "нет, это не так",
когда мы скручиваемся на терминале, он останавливается на том, что, по моему мнению, является куском, и нажатие вводит больше данных, это определенно кусок?
В противном случае я бы хотел найти скрипт, который сохранит каждый фрагмент в файл.
На основе примеров из документов для объекта pycurl.Curl():
#!/usr/bin/env python
import sys
from contextlib import closing as C
import pycurl
class Writer:
def __init__(self, file):
self.file = file
def write(self, data):
sys.stderr.write(data)
self.file.write(data)
def close(self):
self.file.close()
url = 'http://stackoverflow.com/questions/8909710/'
with C(pycurl.Curl()) as c, C(Writer(open('output','wb'))) as w:
c.setopt(c.URL, url)
c.setopt(c.WRITEFUNCTION, w.write)
c.setopt(c.FOLLOWLOCATION, True)
c.perform()
print >>sys.stderr, c.getinfo(c.HTTP_CODE), c.getinfo(c.EFFECTIVE_URL)
Я не знаю, как сделать curl делать то, что вы хотите (я даже не думаю, что это возможно с использованием API сокетов BSD), но я думаю, что могу помочь вам отладить вашу проблему.
Я думаю, что вам нужен пакетный сниффер, такой как Wireshark, который позволит вам проверять содержимое пакета и точно видеть, что происходит "на проводе".
w.write()
libcurl, как только получаются данные, которые необходимо сохранить. Это может быть 1 байт, это может быть 100 КБ. Внутри этой функции вы можете объединить / нарезать ее, чтобы получить свои чанки (что бы ни значил чанк). Я добавилsys.stderr.write(data)
чтобы вы могли видеть данные по мере их поступления.