linux curl http get 请求中带有中文参数或者特殊字符处理

时间:2023-01-06 12:57:51

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