ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

libcurl第六课 x-www-form-urlencoded使用

2019-09-02 10:55:40  阅读:297  来源: 互联网

标签:www 第六课 form 22% 20% 0A% easy pCurlHandle curl


场景
    当HTTP交互中,服务器端指定了application/x-www-form-urlencoded的Content-Type类型,需要对Body报文实体进行url编码。libcurl提供了curl_easy_escape

例子
 static void TestPostOfRestfulInterfaceByUrlEncode()
 {
  CURL *pCurlHandle = curl_easy_init();
  curl_easy_setopt(pCurlHandle, CURLOPT_CUSTOMREQUEST, "POST");
  curl_easy_setopt(pCurlHandle, CURLOPT_URL, "http://192.168.10.163:80/cs/restfull/excuteSqlByCode");
  struct curl_slist *pCurlList = NULL;
  pCurlList = curl_slist_append(pCurlList, "Content-Type: application/x-www-form-urlencoded");//指定文本url编码
  curl_easy_setopt(pCurlHandle, CURLOPT_HTTPHEADER, pCurlList);
  Json::Value jsonAuthen;
  jsonAuthen["loginAccount"] = "root";
  std::string strAuth = jsonAuthen.toStyledString();
//对参数authorJson的内容:{ "loginAccount" : "root"}  ,进行url编码
char* pszEncodeAuth = curl_easy_escape(pCurlHandle, strAuth.c_str(), strAuth.length());
  std::string strEncodeAuth = pszEncodeAuth;
//释放申请的内存
  curl_free(pszEncodeAuth);
  Json::Value jsonContent;
  jsonContent["operatorname"] = "PostName";
  Json::Value jsonParams;
  jsonParams["name"] = "fengyuzaitu";
  jsonContent["params"] = jsonParams;
  std::string strParams = jsonContent.toStyledString();
  char* pszParams = curl_easy_escape(pCurlHandle, strParams.c_str(), strParams.length());
  std::string strEncodeParams = pszParams;
  curl_free(pszParams);
  std::string strPostData = "authorJson=" + strAuth + "&parmJson=" + strParams;
  curl_easy_setopt(pCurlHandle, CURLOPT_POSTFIELDS, strPostUrlEncodeData.c_str());
  CURLcode nRet = curl_easy_perform(pCurlHandle);
  if (0 == nRet)
  {
   std::cout << "Post message successfully" << std::endl;
  }
  curl_slist_free_all(pCurlList);
  curl_easy_cleanup(pCurlHandle);
 }

内容分析:
/*
没有经过url编码的原始数据如下:
authorJson={
   "loginAccount" : "root"
}
&parmJson={
   "operatorname" : "PostName",
   "params" : {
      "name" : "fengyuzaitu"
   }
}
*/
  std::string strPostUrlEncodeData = "authorJson=" + strEncodeAuth + "&parmJson=" + strEncodeParams;
/*
经过url编码的数据如下:authorJson=%7B%0A%20%20%20%22loginAccount%22%20%3A%20%22root%22%0A%7D%0A&parmJson=%7B%0A%20%20%20%22operatorname%22%20%3A%20%22PostName%22%2C%0A%20%20%20%22params%22%20%3A%20%7B%0A%20%20%20%20%20%20%22name%22%20%3A%20%22fengyuzaitu%22%0A%20%20%20%7D%0A%7D%0A
*/


标签:www,第六课,form,22%,20%,0A%,easy,pCurlHandle,curl
来源: https://blog.51cto.com/fengyuzaitu/2434642

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有