libcurl第六课 x-www-form-urlencoded使用
  TEZNKK3IfmPf 2023年11月14日 35 0

场景

    当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.85:8080/cs/restfull/operationRestfullApi/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

*/

注意:

目前在某个现场将2020-05/2020052715490000-0.jpg_2020-05/2020052715490000-0.jpg字符串通过urlencode编码之后,写库失败,一旦/编码之后入库失败,所以单独写了一个编码函数,取消对/的编码

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

TEZNKK3IfmPf