Как вы читаете отдельные куски cUrl?

1

Есть ли способ загрузить с URL-адреса и сохранить каждый отдельный фрагмент, когда он возвращается с сервера, чтобы разделить файл на анализ?

У меня проблема, когда я думаю, что сервер рубит конец выхода json, но компания, с которой мы получаем ответы, говорит "нет, это не так",

когда мы скручиваемся на терминале, он останавливается на том, что, по моему мнению, является куском, и нажатие вводит больше данных, это определенно кусок?

В противном случае я бы хотел найти скрипт, который сохранит каждый фрагмент в файл.

Теги:
curl

2 ответа

1
Лучший ответ

На основе примеров из документов для объекта 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)
  • 0
    как это разделить куски?
  • 0
    @Joseph Le Brech: w.write() libcurl, как только получаются данные, которые необходимо сохранить. Это может быть 1 байт, это может быть 100 КБ. Внутри этой функции вы можете объединить / нарезать ее, чтобы получить свои чанки (что бы ни значил чанк). Я добавил sys.stderr.write(data) чтобы вы могли видеть данные по мере их поступления.
Показать ещё 2 комментария
2

Я не знаю, как сделать curl делать то, что вы хотите (я даже не думаю, что это возможно с использованием API сокетов BSD), но я думаю, что могу помочь вам отладить вашу проблему.

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

  • 0
    как curl возвращает отдельные куски? он посылает escape-символ между кусками? это объяснило бы, почему это останавливается на том, что я думаю - кусок.
  • 0
    +1 для wireshark, отлично подходит для диагностики подобных проблем
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню