`
finux
  • 浏览: 202173 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用libcurl提交POST请求

    博客分类:
  • C
阅读更多

最近在学习libcurl,并利用它提交POST请求,可是返回的响应总是无从验证该次POST请求是否成功提交了。

1. 先看下根据firebug提交的一次成功的请求,这里以login我喜欢上的xiami为例,嘻嘻~

 

1.1 本次POST请求的HTTP交互

 

1.2 POST

 

1.3 经server端redirect的GET

 

2. OK,接下来看下使用libcurl向xiami发送POST请求

 

2.1 使用libcurl的大概流程
curl_easy_init()
curl_easy_setopt()
curl_easy_perform()
curl_easy_cleanup()
呵呵~超简单的吧,具体的意思这里就不详细说了,参见http://curl.haxx.se/libcurl/c/

 

2.2 再来看简单的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

#define POSTURL "http://www.xiami.com/member/login"
#define POSTFIELDS "email=myemail@163.com&password=mypassword&autologin=1&submit=登 录&type="
#define FILENAME "curlposttest.log"

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);

int main(int argc, char *argv[]) {
	CURL *curl;
	CURLcode res;
	FILE *fptr;
	struct curl_slist *http_header = NULL;

	if ((fptr = fopen(FILENAME, "w")) == NULL) {
		fprintf(stderr, "fopen file error: %s\n", FILENAME);
		exit(1);
	}

	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, 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);
	curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/Users/zhu/CProjects/curlposttest.cookie");
	res = curl_easy_perform(curl);
	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);
}

 

2.3 说下这当中的一些操作吧

CURLOPT_URL: URL地址
CURLOPT_POSTFIELDS: POST参数
CURLOPT_WRITEFUNCTION: 对返回的数据进行操作的函数地址
CURLOPT_WRITEDATA: 设置WRITEFUNCTION的第四个参数值
CURLOPT_POST: 设置为非0表示本次操作为POST
CURLOPT_VERBOSE: 设置为非0在执行时打印请求信息
CURLOPT_HEADER: 设置为非0将响应头信息同响应体一起传给WRITEFUNCTION
CURLOPT_FOLLOWLOCATION: 设置为非0,响应头信息Location

CURLOPT_COOKIEFILE: 哈哈,这个实在是太重要了,我之前尝试了好多次没法验证该次POST是否成功的原因就是没有设置这个罗。设置对应的COOKIEFILE路径,该路径文件并不一定需要在物理磁盘上实际存在

 

2.4 接下来是成功返回的结果哦,呵呵,下面截图当中的zhuzhu可以为证,不好意思,xiami上取了个比较CUO的名字~

 

1
0
分享到:
评论
1 楼 weituotian 2017-06-06  
不好,不能用

相关推荐

    libcurl 提交post表单数据 上传图片 demo

    为了提交POST表单数据,你需要使用`curl_easy_setopt()`函数设置请求方法为POST,并提供POST字段数据。例如,如果表单有一个名为`username`的字段和一个名为`password`的字段,你可以这样做: ```cpp if(curl) { ...

    使用libcurl库搭建的c++版的带json实体的post请求

    c++版的带json实体的post请求,本人使用vs2015搭建了项目,压缩包内包括所有的文件,可以直接运行,如有问题请联系邮件zhangxin.lyl@gmail.com,具体libcurl的配置和json的配置见个人博客

    C++使用libcurl提供的API上传文件且Post表单数据

    首先,`con_test.cpp`是主要的源代码文件,它包含了使用libcurl进行文件上传和POST操作的具体实现。`StdAfx.cpp`和`StdAfx.h`是Visual Studio项目中的预编译头文件,用于提高编译速度。`con_test.dsp`和`con_test....

    基于libcurl实现http post支持并发,异步

    以下是一个简单的示例,展示了如何使用libcurl异步并发地发送POST请求: 1. 初始化多会话句柄: ```cpp CURLM* multi_handle = curl_multi_init(); ``` 2. 创建并添加单个curl会话: ```cpp CURL* easy_handle = ...

    libcurl POST方式

    在给定的`MFCApplication2`项目中,我们可以看到这是一个基于Visual Studio 2013的MFC应用,可能包含了完整的代码示例,演示了如何在MFC环境中使用libcurl进行POST请求。MFC(Microsoft Foundation Classes)是微软...

    C++ http post get请求,第三方库,调试的时候,使用wireshark抓包,对比

    GET请求通常用于获取资源,而POST请求用于提交数据到服务器进行处理。本篇文章将深入探讨如何在C++中实现HTTP POST和GET请求,并介绍在调试过程中使用第三方库libcurl以及网络封包分析工具Wireshark。 1. **C++中的...

    C++实现POST请求

    本文将详细介绍如何使用C++来实现HTTP POST请求,并通过具体的代码示例来解释这一过程。 #### 二、HTTP POST 方法简介 POST是HTTP协议中的一个标准方法,用于向指定资源提交数据进行处理请求(例如提交表单或者上传...

    c版本的http post 上传/下载文件/JSON

    以下是一个简单的C语言代码示例,展示了如何使用libcurl发起POST请求: ```c #include #include void perform_post_request(const char* url, const char* json_data) { CURL *curl; CURLcode res; curl_...

    C++实现HTTP GET,POST请求

    POST请求则常用于向服务器提交数据,如表单提交。POST请求的数据包含在请求体中,而非URL。C++实现POST请求时,除了构造请求头,还需添加Content-Length字段表示请求体的长度,以及实际的请求体内容: ```cpp void ...

    VS2015 NuGet 使用libcurl示例工程

    在示例工程中,开发者可能会展示如何使用libcurl发送HTTP GET请求获取网页内容,或者发送POST请求提交表单数据。 **CurlTest项目** 压缩包中的"CurlTest"很可能是一个包含了使用libcurl的示例代码的项目文件。这个...

    VC++ HTTP Get Post请求

    POST请求常用于向服务器提交数据。与GET类似,但需额外提供POST数据。以下是实现POST请求的步骤: 1. 创建`CHttpFile`对象时,除了URL,还需要提供POST数据的名称和值。 2. 在`SendRequest`之前,调用`...

    windows平台简单的http_client实现POST-GET方法C语言实现

    POST请求通常用于提交表单数据或上传文件。与GET类似,首先初始化CURL句柄,但这次需要设置POST字段和POST数据类型。可以使用`curl_easy_setopt()`设置`CURLOPT_POSTFIELDS`选项传递POST数据。如果数据来自结构化...

    libcurl使用demo【更新】

    5. **POST请求**:通过设置`CURLOPT_POSTFIELDS`,可以发起POST请求,将数据提交到服务器。 6. **上传下载进度监控**:`curl_easy_setopt`可以设置回调函数来跟踪上传和下载进度。 7. **代理支持**:libcurl允许...

    libcurl的使用案例

    在libcurl中,你需要设置`CURLOPT_POSTFIELDS`选项,提供POST数据,并可能设置`CURLOPT_POST`选项为1,指示这是一个POST请求。 3. **PUT**:PUT方法用于替换服务器上的现有资源,或者创建新资源(如果不存在)。在...

    HTTP请求(包括GET与POST请求)

    POST请求则常用于向服务器提交数据,例如表单提交。POST请求可以携带大量数据,其数据隐藏在请求体中,相对安全,但并非绝对。POST请求不是幂等的,连续执行两次可能会产生不同的结果,比如创建两个独立的资源。 ...

    支持HTTPS的libcurl

    libcurl通过`CURLOPT_POSTFIELDS`等选项设置POST数据,并可以处理MIME类型和其他表单属性。 **lib、dll、include文件** 在提供的压缩包中,`lib`文件夹通常包含编译好的libcurl库文件,这些文件在编译应用时需要...

    支持https的libcurl.zip

    libcurl提供了便捷的API接口,使得开发者可以方便地模拟这种行为,进行POST请求,将表单数据发送到指定的URL。 使用libcurl库,开发者可以编写跨平台的应用程序,因为它在多种操作系统上都有良好的支持,包括...

    libcurl-7.32.0

    2. **POST数据提交**:使用`CURLOPT_POSTFIELDS`设置POST数据,`CURLOPT_HTTPPOST`启用POST操作。 3. **上传文件**:结合`CURLOPT_UPLOAD`和`CURLOPT_READFUNCTION`,可以从内存或文件读取数据进行FTP或HTTP上传。 ...

    Libcurl 登陆百度

    为了适应现代网页登录,你可能需要使用额外的库如`libcurl_easy`的扩展`libcurl_formadd`来处理复杂的POST数据,或者使用像`libcurl_multi`来同时处理多个请求,以应对登录过程中可能出现的异步操作。 还要注意,...

Global site tag (gtag.js) - Google Analytics