mfc,C++,HTTP,POST方式提交请求

用到第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



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值