pycurl.INFOTYPE_HEADER_OUT的用途是什么?

时间:2012-07-01 08:50:29

标签: python pycurl

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

2 个答案:

答案 0 :(得分:1)

这不是设置,而是用于调试目的的标志,用于打印库发送 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()

以下是documentation

中的相关位
  

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

     

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

答案 1 :(得分:0)

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

我的意思是如何使用pycurl。它与php的curl界面不完全相似......