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