Pycurl WRITEDATA WRITEFUNCTION коллизия/сбой

Как отключить WRITEFUNCTION и WRITEDATA?

Используя pycurl, у меня есть вызов класса curlUtil. В нем у меня есть pageAsString(self, URL), которая возвращает строку.

Для этого я выбираю WRITEFUNCTION. Теперь в файле загрузки (self, URL, fn, overwrite=0) я делаю открытие и self.c.Setopt (pycurl.WRITEFUNCTION, 0), что вызывает проблемы. Int не является допустимым аргументом.

Затем я предположил, что WRITEDATA перезапишет значение или появится команда NOWRITEFUNCTION. NOWRITEFUNCTION не существовало, поэтому я просто использовал WRITEDATA, и Python разбился.

Я написал быструю функцию reboot(), которая закрывает curl, снова открывает его и вызывает reset, чтобы перевести его в состояние по умолчанию. Я вызываю это как в pageAsString, так и в downloadFile, и проблем нет вообще. Но я не хочу повторно инициализировать curl. Возможно, я установил какие-то специальные параметры.

Как отключить WRITEFUNCTION и WRITEDATA?


person Community    schedule 17.11.2008    source источник


Ответы (1)


использование функции записи вместо ее отключения избавит вас от многих проблем. вы можете переписать свою pageAsString, используя WRITEFUNCTION..

В качестве примера:

from cStringIO import StringIO
c = pycurl.Curl()
buffer = StringIO()
c.setopt(pycurl.WRITEFUNCTION, buffer.write)
c.setopt(pycurl.URL, "http://example.com")
c.perform()
...
buffer.getvalue() # will return the data fetched.
person altunyurt    schedule 17.11.2008
comment
Мой pageAsString работает аналогичным образом. Проблема в том, что когда я открываю файл в do setpot (pycurl.WRITEDATA, файл). Однако я мог бы изменить его, чтобы он использовал данные для записи, но я хотел знать, как его отключить, если мне нужно отключить другую опцию. - person ; 18.11.2008
comment
установка функции записи на 0 отключит ее. вам придется позаботиться о других вещах, которые libcurl будет применять в этом случае. все подробно описано здесь: curl.haxx.se/libcurl/c/curl_easy_setopt.html - person altunyurt; 18.11.2008
comment
я делаю это в моей версии C. В pycurl я получаю сообщение об ошибке :(. Он не допускает int в качестве параметра. Но это нормально, я могу исправить это, используя функцию записи вместо записи данных. - person ; 18.11.2008