curl的使用和发送POST请求传参取返回值实例C++

- 引用curl

下载curl包 https://curl.se/download.html(网上有很多下载最新版本的就行)
我的资源里有我用的版本

请添加图片描述

会得到两个压缩文件,解压后

把文件里的 curl 文件夹 和两个curl链接库添加到项目文件里

添加 libcurl.lib 资源
请添加图片描述
项目添加现有项目,添加文件里的curl.h 文件

添加#include “curl/curl.h” 头文件

然后看代码


//UTF82WCS转CString
CString UTF82WCS(const char* szU8)
{
	//预转换,得到所需空间的大小;
	int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);

	//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
	wchar_t* wszString = new wchar_t[wcsLen + 1];

	//转换
	::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);

	//最后加上'\0'
	wszString[wcsLen] = '\0';

	CString unicodeString(wszString);

	delete[] wszString;
	wszString = NULL;

	return unicodeString;
}

//传入url和参数,return的就是返回值
CString m_Post::SendCurl(std::string url,std::string admintoken)
{
	string response = "";
	CURL* curl;
	CURLcode res;
	curl = curl_easy_init();
	if (curl) {
		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
		curl_easy_setopt(curl, CURLOPT_URL, url);
		curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
		curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "http");
		
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
		curl_mime* mime;
		curl_mimepart* part;
		mime = curl_mime_init(curl);
		part = curl_mime_addpart(mime);
		curl_mime_name(part, "admintoken");
		curl_mime_data(part, admintoken.c_str(), CURL_ZERO_TERMINATED);//传入的是字符串的话可能要转为UTF8服务器才能识别,不然传入的可能是(null)
		part = curl_mime_addpart(mime);
		
		curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);

		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &getUrlResponse);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

		res = curl_easy_perform(curl);
		curl_mime_free(mime);
	}
	curl_easy_cleanup(curl);

	CString Cjson = UTF82WCS(response.c_str());//UTF8编码转CString
	return Cjson;
}

没有传成功看一下res的值,
如果是60,这是因为没有安装引用协议什么的
加上这行就好

		curl_easy_setopt(curl, CURLOPT_CAINFO, "./cacert.pem");

pem文件我的资源里面有

你可能感兴趣的:(C++学习,curl,c++,开发语言)