PycURL Ответ на HTTP-запрос разделен на части

Я пытаюсь использовать пример curl из репозитория https://github.com/pycurl/pycurl/blob/master/examples/retriever-multi.py

Вместо сохранения в файл я использую WRITEFUNCTION

Когда ответ от сервера большой, он разбивается на части. Похоже я делаю что-то не так. Разделение ответа на части не позволяет мне работать с json. Пожалуйста, подскажите, как я могу использовать WRITEFUNCTION для обработки больших json-файлов?


Вывод программы:

BUF - {"response":[{"id":6001,"name":"Концерт \"Picasso\" в арт-клубе
\"Манхэттен\"","screen_name":" len - 15380

BUF - 83cR49qqrd-NquOCUFkND4FunHI.jpg?size=50x0&quality=96&crop=126,80,613,613&ava=1","photo_100":"https:\
len - 113

BUF - erapi.com\/s\/v1\/ig2\/JLMiTVzQcB3-uI8oP9IVu5NCzXBBsvcwk8INNt3Zz_gKg17c73tNt5Ierfc-KCfRREi4eZMWXtgtU
len - 15810

BUF - /FkG4FWgSBPhmdTfH6SHCtO4Ial85objK6iRlPBUE0o2DV1KsRyhbGbCpXsjo9y0Kuykg5svRpnj95obslrvtl3GV.jpg?size=2
len - 15896

BUF - me":"club6124","is_closed":1,"type":"group","members_count":0,"photo_50":"https:\/\/vk.com\/images\/
len - 15924

***

def check_data(buf):
    buf_utf = buf.decode("utf-8", "ignore")
    print(f'BUF - {buf_utf[:100]} len - {len(buf_utf)}\n')

***

for i in range(num_conn):
    c = pycurl.Curl()
    c.setopt(pycurl.URL, URL)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.FOLLOWLOCATION, 1)
    c.setopt(pycurl.MAXREDIRS, 5)
    c.setopt(pycurl.CONNECTTIMEOUT, 300)
    c.setopt(pycurl.TIMEOUT, 3000)
    c.setopt(pycurl.NOSIGNAL, 1)
    c.setopt(pycurl.WRITEFUNCTION, check_data)
    m.handles.append(c)

freelist = m.handles[:]
num_processed = 0
while num_processed < num_urls:
    # If there is an url to process and a free curl object, add to multi stack
    while queue and freelist:
        post = queue.pop(0)
        c = freelist.pop()
        c.setopt(pycurl.POSTFIELDS, post)
        m.add_handle(c)
    # Run the internal curl state machine for the multi stack
    while 1:
        ret, num_handles = m.perform()
        if ret != pycurl.E_CALL_MULTI_PERFORM:
            break
    # Check for curl objects which have terminated, and add them to the freelist
    while 1:
        num_q, ok_list, err_list = m.info_read()
        for c in ok_list:
            m.remove_handle(c)
            freelist.append(c)
        for c, errno, errmsg in err_list:
            c.fp = None
            m.remove_handle(c)
            freelist.append(c)
        num_processed = num_processed + len(ok_list) + len(err_list)
        if num_q == 0:
            break

***


Ответы (0 шт):