libcurl进行https的post参数
libcurl开发库可以在官网下载:
http://curl.haxx.se/download.html
用libcurl进行开发,想实现与https的站点的交互,向https://url.cn/APIList ,发送post值: key1=value1&key2=value2;
主要用到的函数是:
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
对于https://url.cn,需要属性CURLOPT_URL
curl_easy_setopt(curl, CURLOPT_URL, "https://url.cn/APIList");
现在需要启用post方式
curl_easy_setopt(curl,CURLOPT_POST,1);
将post的键值对内容传入
char *pPost = "email=abc@126.com&password=123456"; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(pPost));//post内容长度 curl_easy_setopt(curl,CURLOPT_POSTFIELDS,pPost);//写入post区域
后续内容就按正常步骤了。
详细代码:
// Win32Demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include "curl/curl.h" #include <iostream> using namespace std; //utf 转gbk,部分网站中文乱码需要用到,此时可以无视 string UTF8ToGBK(const std::string& strUTF8) { int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0); unsigned short * wszGBK = new unsigned short[len + 1]; memset(wszGBK, 0, len * 2 + 2); MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUTF8.c_str(), -1, (LPWSTR)wszGBK, len); len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL); char *szGBK = new char[len + 1]; memset(szGBK, 0, len + 1); WideCharToMultiByte(CP_ACP,0,(LPWSTR)wszGBK, -1, szGBK, len, NULL, NULL); //strUTF8 = szGBK; std::string strTemp(szGBK); delete[]szGBK; delete[]wszGBK; return strTemp; } int _tmain(int argc, _TCHAR* argv[]) { //https CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://url.cn/APIList"); curl_easy_setopt(curl,CURLOPT_POST,1); char *pPost = "login_email=abc@126.com&password=123456"; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(pPost)); curl_easy_setopt(curl,CURLOPT_POSTFIELDS,pPost); //跳过对ca的检查,简单 #define SKIP_PEER_VERIFICATION #ifdef SKIP_PEER_VERIFICATION /* * If you want to connect to a site who isn't using a certificate that is * signed by one of the certs in the CA bundle you have, you can skip the * verification of the server's certificate. This makes the connection * A LOT LESS SECURE. * * If you have a CA cert for the server stored someplace else than in the * default bundle, then the CURLOPT_CAPATH option might come handy for * you. */ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); #endif //跳过检查 #define SKIP_HOSTNAME_VERIFICATION #ifdef SKIP_HOSTNAME_VERIFICATION /* * If the site you're connecting to uses a different host name that what * they have mentioned in their server certificate's commonName (or * subjectAltName) fields, libcurl will refuse to connect. You can skip * this check, but this will make the connection less secure. */ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); #endif /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } curl_global_cleanup(); getchar(); return 0; }
posted on 2017-10-12 21:27 zhuxian2009 阅读(460) 评论(0) 编辑 收藏 举报