這裏一個java程序員進行C++開發使用libcurl踩過的坑:java
1. 發送指定請求類型body,比較通用方法以下,能夠直接填寫數據並手動指定content type,若是是form表單等形式,則須要參考curl_formadd方法程序員
struct curl_slist *list = NULL; list = curl_slist_append(list, "Content-Type: application/octet-stream"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); /* size of the POST data */ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, bufferLen); /* pass in a pointer to the data - libcurl will not copy curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buffer);
2. 響應結果包含了響應行和頭域信息app
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);curl
如上所示,獲得的response包含響應行和頭域信息,並且網上也沒有相關問題描述。緣由爲設置了以下參數。url
//CURLOPT_HEADER設置爲1時,回調數據會返回響應行和header行 curl_easy_setopt(curl, CURLOPT_HEADER, 1);
3.form-data包拆分問題,多了一個Continuation的包,雖然跟蹤流顯示是同樣的,可是服務端解析失敗spa
這個最終發現坑在我添加了一個自定義頭域,頭域的值以\n結尾,libcurl不會對其進行轉義,致使請求行之間多了一個空行,http請求格式不徹底符合協議標準致使code
4. curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); 崩潰問題orm
其實是由於 httpCode 類型錯誤,應該申明爲long,若是申明爲int,則調用時可能出現段錯誤。blog
參考 https://www.bo56.com/libcurl%E4%B8%AD%E4%BD%BF%E7%94%A8curl_easy_getinfo-%E4%BA%A7%E7%94%9F%E6%AE%B5%E9%94%99%E8%AF%AF%E5%88%86%E6%9E%90/ssl
5.不支持https問題
訪問https報錯「Protocol https not supported or disabled in libcurl」,可經過curl -V 查看是否有HTTPS。若是沒有則不支持,須要更新。
可行辦法之一是下載源碼。編譯安裝時 執行
./configure -with-ssl
帶上-with-ssl 進行編譯