2012-07-01 26 views
1

在php中有如下行代碼:pycurl.INFOTYPE_HEADER_OUT有什麼用?

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聲明我必須在這種情況下鍵入?

回答

1

這不是一個設置,而是一個用於調試的標誌,用於打印庫中發送的的原始頭文件。要使用它,你需要定義一個回調爲您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

的數據是發送給對等協議數據。