用到第3方库,libcurl.lib,libcurl.dll
最好从官网下载,下载exe文件,然后安装下,会出现一个curl文件夹,还有libcurl.lib,libcurl.dll文件。
#include "curl/curl.h"//注意路径,放在哪个路径下就写哪个路径
#define POSTURL "http://cert.icinfo.cn/binddataquery"
#define POSTFIELDS "data1&data2&data3"//数据之间以&连接
#pragma comment(lib, "libcurl.lib")//注意路径
接下来是post数据请求代码:
CURL *curl;
CURLcode res;
std::string fptr;
struct curl_slist *http_header = NULL;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, POSTURL);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTFIELDS);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); //注意回调函数
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&fptr); //传的引用
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
res = curl_easy_perform(curl); //返回错误码,见后边链接1
if(res)
{
MessageBox("conect error","提示",MB_OK);
return false;
}
CString str = fptr.c_str();
MessageBox(str,"",MB_OK);
curl_easy_cleanup(curl);
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) {
/* FILE *fptr = (FILE*)userp;
fwrite(buffer, size, nmemb, fptr);
return size * nmemb;;*/
std::string* str = dynamic_cast<std::string*>((std::string *)userp);
if( NULL == str || NULL == buffer )
{
return -1;
}
char* pData = (char*)buffer;
if(pData)
{
str->append(pData, size * nmemb);
}
return nmemb;
}
遇到的问题:
1. 如果提示“没有找到zlib1.dll,因此这个应用程序未能启动”。
下载合适的zlib1.dll,下载的地址忘记了,放在system32下,如果有的话,覆盖掉以前的。
链接1:
http://blog.csdn.net/cwj649956781/article/details/8086337
链接2:
http://blog.csdn.net/wzx19840423/article/details/6587370