какая польза от pycurl.INFOTYPE_HEADER_OUT?

В php есть такие строки кода:

curl_setopt($ch, CURLINFO_HEADER_OUT, правда);

Я не понимаю точного значения этого; Я предполагаю, что если установлено значение true, вы получаете информацию заголовка вместе с ответом. Но он вызывается против заданных методов.

В библиотеке Python pycurl самое близкое, к чему я мог добраться, было pycurl.INFOTYPE_HEADER_OUT. Но он выдает ошибку, когда я вызываю его против установленных методов:

>>> c = pycurl.Curl()
>>> c.setopt(pycurl.INFOTYPE_HEADER_OUT, 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pycurl.error: (48, '')
>>> c.getinfo(pycurl.INFOTYPE_HEADER_OUT)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid argument to getinfo

Какой правильный оператор python я должен ввести в этом случае?


person deostroll    schedule 01.07.2012    source источник


Ответы (2)


Это не параметр, а скорее флаг, который используется в целях отладки для печати необработанных заголовков, отправляемых out библиотекой. Чтобы использовать его, вам нужно определить обратный вызов как ваш DEBUGFUNCTION, а затем обработать возвращаемый тип:

sent_headers = []
received_headers = []
def collect_headers(debug_type, debug_msg):
    if debug_type == pycurl.INFOTYPE_HEADER_OUT:
            sent_headers.append(debug_msg)
    if debug_type == pycurl.INFOTYPE_HEADER_IN:
            received_headers.append(debug_msg)

# somewhere later in the code

c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://www.google.com/')
c.setopt(pycurl.DEBUGFUNCTION, collect_headers)
c.perform()

Вот соответствующие фрагменты из документации:

CURLOPT_DEBUGFUNCTION

Передать указатель на функцию, соответствующую следующему прототипу: int curl_debug_callback(CURL *, curl_infotype, char *, size_t, void *); CURLOPT_DEBUGFUNCTION заменяет стандартную функцию отладки, используемую, когда действует CURLOPT_VERBOSE. Этот обратный вызов получает отладочную информацию, как указано в аргументе curl_infotype. Эта функция должна возвращать 0. Данные, на которые указывает char *, переданный этой функции, НЕ БУДУТ завершаться нулем, а будут иметь размер, точно указанный аргументом size_t.

Доступные значения curl_infotype:

CURLINFO_TEXT

Данные являются информационным текстом.

CURLINFO_HEADER_IN

Данные представляют собой данные заголовка (или подобные заголовку), полученные от однорангового узла.

CURLINFO_HEADER_OUT

Данные представляют собой данные заголовка (или подобные заголовку), отправляемые партнеру.

CURLINFO_DATA_IN

Данные представляют собой данные протокола, полученные от однорангового узла.

CURLINFO_DATA_OUT

Данные представляют собой данные протокола, отправляемые узлу.

person Burhan Khalid    schedule 01.07.2012

Выяснил, что у pycurl есть особый способ вызова, если вы не хотите, чтобы ответ perform() выводился на ваш экран. Проверьте https://stackoverflow.com/a/2776815/145682.

Я имею в виду, что это просто как использовать pycurl. Это не совсем похоже на интерфейс curl php...

person deostroll    schedule 07.07.2012