在使用c++去請求http服務的時候,使用的是著名的curl工具提供的類庫 libcurl,但是在使用的過程中發現,如果請求的參數值帶了空格或者是參數是中文,會導致響應的回調函數沒有被執行,雖然curl_easy_perform 返回的CURLcode 為 CURLE_OK,但是實際上是沒有數據的。
考慮到可能需要轉義,於是研究了下官方文檔,具體參考如下鏈接: http://curl.haxx.se/libcurl/c/curl_escape.html
使用 curl_easy_escape 方法可解決上述的問題,注意使用的時候需要釋放返回的字符串,舉例如下:
string input ="get請求參數"; // input為 get請求參數
char * escape_control = curl_escape(input.c_str(), input.size()); input = escape_control; curl_free(escape_control); string str_url= "http://*.*.*.*:8082/getReply?input=" + input; ... ... curl_easy_setopt(pCurl, CURLOPT_URL, str_url.c_str());
例子中使用curl_escape() 函數對所要發送的請求參數進行處理,然后再發送.
注意:
curl_escape() 函數 不能對整個url 請求地址進行處理,只能對后面的請求參數進行處理,否則會造成地址錯誤,找不到服務器。
如例子中的 str_url,不能對其整個請求進行處理。
get 請求只能通過將請求參數放到url中的方式一起使用。CURLOPT_URL