linux curl http get 請求中帶有中文參數或者特殊字符處理


在使用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

參考:http://finallygo.iteye.com/blog/2105901


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM