1

在 php 中有如下代码行:

curl_setopt($ch, CURLINFO_HEADER_OUT, true);

我不明白它的确切含义;我认为它设置为 true 时意味着您将获得标题信息以及响应。但它是针对 set 方法调用的。

在 python 的 pycurl 库中,我最接近的是pycurl.INFOTYPE_HEADER_OUT. 但是当我针对 set 方法调用它时会引发错误:

>>> 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 语句是什么?

4

2 回答 2

3

这不是一个设置,而是一个用于调试目的的标志,用于打印库发出的原始标。要使用它,您需要定义一个回调作为您的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

数据是发送给对等体的协议数据。

于 2012-07-01T12:52:25.727 回答
0

发现如果您不希望在perform()屏幕上输出响应,则 pycurl 有一种特殊的调用方式。检查https://stackoverflow.com/a/2776815/145682

我的意思是这只是如何使用 pycurl。它并不完全类似于 php 的 curl 界面......

于 2012-07-07T06:52:34.003 回答