C++用libcurl通过HTTP以表单的方式Post数据到服务器
2017-10-15 00:57
375 查看
一、Post 字符串
二、Post 文件
#include <stdio.h>
#include <curl/curl.h>
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid);
int main(void)
{
CURL* curl = NULL;
CURLcode res;
curl = curl_easy_init();
if(curl == NULL)
{
return CURLE_FAILED_INIT;
}
struct curl_slist* headerlist = NULL;
struct curl_httppost* formpost = NULL;
struct curl_httppost* lastptr = NULL;
std::string strResponse; // 回复
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName1",
CURLFORM_COPYCONTENTS, "ParamName1Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName2",
CURLFORM_COPYCONTENTS, "ParamName2Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName3",
CURLFORM_COPYCONTENTS, "ParamName3Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "registerImgs",
CURLFORM_FILE, "C:/Image.png", CURLFORM_END); // 设置要上传的文件
// 设置表单参数
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
// 设置表头,表头内容可能不同
headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
// 设置参数,比如"ParamName1=ParamName1Content&ParamName2=ParamName2Content&..."
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");
// 设置为Post
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
// 发送
res = curl_easy_perform(curl);
if(res != CURLE_OK)
{
// 获取详细错误信息
char* szErr = curl_easy_strerror(res);
fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr);
}
// 清空
curl_easy_cleanup(curl);
// 释放表单
curl_formfree(formpost);
// 释放表头
curl_slist_free_all (headerlist);
return 0;
}
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
{
std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
if( NULL == str || NULL == buffer )
{
return -1;
}
char* pData = (char*)buffer;
str->append(pData, size * nmemb);
return nmemb;
}
#include <stdio.h> #include <curl/curl.h> int main(void) { CURL* curl = NULL; CURLcode res; curl = curl_easy_init(); if(curl == NULL) { return CURLE_FAILED_INIT; } struct curl_slist* headerlist = NULL; // 设置表头,表头内容可能不同 headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); // 设置URL curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi"); // 设置参数,比如"ParamName1=ParamName1Content&ParamName2=ParamName2Content&..." curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl"); // 设置为Post curl_easy_setopt(curl, CURLOPT_POST, 1); // 发送 res = curl_easy_perform(curl); if(res != CURLE_OK) { // 获取详细错误信息 char* szErr = curl_easy_strerror(res); fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr); } // 清空 curl_easy_cleanup(curl); // 释放表头 curl_slist_free_all (headerlist); return 0; }
二、Post 文件
#include <stdio.h>
#include <curl/curl.h>
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid);
int main(void)
{
CURL* curl = NULL;
CURLcode res;
curl = curl_easy_init();
if(curl == NULL)
{
return CURLE_FAILED_INIT;
}
struct curl_slist* headerlist = NULL;
struct curl_httppost* formpost = NULL;
struct curl_httppost* lastptr = NULL;
std::string strResponse; // 回复
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName1",
CURLFORM_COPYCONTENTS, "ParamName1Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName2",
CURLFORM_COPYCONTENTS, "ParamName2Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "ParamName3",
CURLFORM_COPYCONTENTS, "ParamName3Content", CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "registerImgs",
CURLFORM_FILE, "C:/Image.png", CURLFORM_END); // 设置要上传的文件
// 设置表单参数
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
// 设置表头,表头内容可能不同
headerlist = curl_slist_append(headerlist, "Content-Type:application/x-www-form-urlencoded");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
// 设置参数,比如"ParamName1=ParamName1Content&ParamName2=ParamName2Content&..."
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=daniel&project=curl");
// 设置为Post
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
// 发送
res = curl_easy_perform(curl);
if(res != CURLE_OK)
{
// 获取详细错误信息
char* szErr = curl_easy_strerror(res);
fprintf(stderr, "curl_easy_perform() failed: %s\n", szErr);
}
// 清空
curl_easy_cleanup(curl);
// 释放表单
curl_formfree(formpost);
// 释放表头
curl_slist_free_all (headerlist);
return 0;
}
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)
{
std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
if( NULL == str || NULL == buffer )
{
return -1;
}
char* pData = (char*)buffer;
str->append(pData, size * nmemb);
return nmemb;
}
相关文章推荐
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- HttpClient使用post方式模拟表单提交数据到服务器并下载服务器文件
- android中的http通信---(3)通过get、post方式传数据给服务器
- C++通过HTTP请求Get或Post方式请求Json数据
- HttpClient使用post方式模拟表单提交数据到服务器并下载服务器文件
- CC3200 HTTP Cli通过POST的方式把json数据提交给服务器出现的问题
- C++通过HTTP请求Get或Post方式请求Json数据
- 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成
- Java 通过HttpClient Post方式提交json,并从服务端返回json数据
- 利用WebRequest来实现模拟浏览器通过Post方式向服务器提交数据
- android 通过get,post方式提交数据给服务器
- 纯vc sdk实现http post 方式上传数据到web服务器
- android 通过get,post方式提交数据给服务器
- Android -- 提交数据到服务器,Get Post方式, 异步Http框架提交
- 通过POST方式发送数据到远程服务器
- 纯vc sdk实现http post 方式上传数据到web服务器
- http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)
- jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- HttpURLconnection使用POST方式提交JSON数据给服务器