2015-09-01 32 views
2

我正在爲第三方私有API實現HTTP客戶端。該API需要不使用HTTP Keep-Alive。 libcurl可以禁用Keep-Alive?即使我設置了CURLOPT_FORBID_REUSE,它仍然會發送Connection: Keep-Alive標題並將服務器混淆。如果我手動設置Connection: close標題,它甚至會發送此標題。在這種情況下,libcurl會同時發送Connection: Keep-AliveConnection: close HTTP標頭。 有誰知道如何強制libcurl永不重複使用連接併發送Connection: close標頭通知服務器它沒有使用連接,或者Connection: Keep-Alivelibcurl中硬編碼並且無法更改?是否可以通過libcurl禁用HTTP Keep-Alive?

+0

我猜要求第三方修復他們的服務器不是一個選項:P – immibis

+0

如果您使用HTTP 1.1,keep alive頭部不會被明確設置;和CURLOPT_FORBID_REUSE確實會終止連接(通過wireshark驗證)。不過,您必須確保在*每個*請求之前設置該值,但這可能是問題所在。 – Petesh

回答

1

這可以用CURLOPT_HTTPHEADER實現:

#include <curl/curl.h> 

int main(void) { 
    CURL *curl = curl_easy_init(); 
    struct curl_slist *list = NULL; 
    if(curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); 
     list = curl_slist_append(list, "Connection: close"); 
     curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); 
     curl_easy_perform(curl); 
     curl_slist_free_all(list); 
     curl_easy_cleanup(curl); 
    } 
} 

至少它的作品在我的Linux。

+0

我不認爲他在使用簡單的API。簡單的api默認不會傳遞任何頭文件。 ...哎呀,這可能是特定於我的環境(OSX)。 – Petesh

+0

正如我在我的第一篇文章中寫的,它並沒有幫助(至少在Windows上)。當我這樣做時,'libcurl'發佈2個'Connection'頭,一個是'close',另一個是'Keep-Alive'。我使用代理,順便說一句,可能'libcurl'行爲有代理和不代理是不同的。 – Vitaliy

相關問題