C++ 调用libcurl POST方式发送json数据

当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl。Curl是命令行工具,用于完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的请求及接收回馈。libcurl提供给开发者,用于使用C++跨平台的开发各种网络协议的请求及响应。里面的文档非常齐全,不过都是英文的。
下载libcurl包,如果使用Linux平台,建议下载源文件编译;如果使用Windows平台,建议下载Win32 - MSVC,下载地址是:http://curl.haxx.se/download.html

使用前请先行配置。

#include

这里是要在一个MFC工程中调用libcurl库,为此新开辟了一个线程来进行处理。

AfxBeginThread(trans, pParam, 0, 0, NULL);
UINT CMFCApplication1Dlg::trans(LPVOID pParam)
{
 CURL *curl = 0;
 CURLcode res;
 curl = curl_easy_init();//初始化  得到curl的指针
 curl_global_init(CURL_GLOBAL_ALL);//全局初始化
 struct curl_slist *headers = NULL;
 char s[1024];
 memset(s, 0, sizeof(s));
 if (curl != 0) {
  
  curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1);
  headers = curl_slist_append(headers, "Accept: application/json");
  headers = curl_slist_append(headers, "Content-Type:application/json");
  headers = curl_slist_append(headers, "charsets: utf-8");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  curl_easy_setopt(curl, CURLOPT_POST, 1); // POST
  //if(pParam!=NULL)
  string a = CT2A((*(CString*)pParam).GetBuffer(0));
  strcpy_s(s, a.c_str());
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS,s); 
  res = curl_easy_perform(curl);//执行http请求  函数完成传输任务
  if (res != CURLE_OK) {
   fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
  }
  curl_slist_free_all(headers);
  curl_easy_cleanup(curl);//回收curl指针
  curl_global_cleanup();
   }
 //std::cin.get();
 return 0;
}

代码是根据命令行转化过来的,命令行大致如下:

curl -v -x POST -d{}  --header "Content-Type:application/json"

遇到的问题主要是:
数据包的格式:
注意双引号

CString number = CString("\"number\":");

自己搭建的json的数据包总是无法上传,后来查找blog改变了传进来的数据的格式。

curl_easy_setopt(curl, CURLOPT_POSTFIELDS,s);

你可能感兴趣的:(C++ 调用libcurl POST方式发送json数据)