在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语句是什么?
答案 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界面不完全相似......