libcurl实现http交互

原因:由于涉及到使用libcurl进行http交互,故在此进行记录调用流程

概况:利用curl模块实现http请求

http介绍:(hyperText Transfer Protocol超文本传输协议)定义在应用层,底层基于TCP/IP协议,且是一个无状态的协议,永远都是客户端发起请求,服务器响应。http消息由客户端到服务器的请求和服务器到客户端响应组成。请求消息和响应消息都是由开始行(对于请求消息开始行就是请求行,对于响应消息开始行就是状态行)(必须有),消息报头(可以有),消息正文(可以有)组成。如下:

下面为请求信息:具体信息解释如下:

GET /web.html HTTP/1.1:客户端请求方式,请求资源名称,http协议的版本号。其中请求方式有get,post,put,delete等方法,get:从指定的资源请求数据,post:向指定的资源提交要被处理的数据,get一般用于信息获取,而post一般为更新资源信息,且get传输的数据通过url一起拼接传递,而post则放到body中,故post安全性更高,也导致了get数据长度有限。

请求头包含服务器地址和本地设备的信息等。

Accept:客户端支持的数据类型,Accept-Encoding:客户端支持的数据压缩格式,Accpet-Language:客户端支持的语言

User-Agent:客户端软件环境,Connection:是否保持长连接。接下来一个换行,然后紧跟着正文。

下面为应答信息:相应信息包括一个状态行,若干个消息头,以及body内容。

Server:服务器类型 Content-Length:返回数据长度,

接下来就是curl的调用流程:

导入文件和动态库

#include "curl/curl.h"
#pragma comment(lib,“libcurl.lib”)

定义一个CURL对象,并进行初始化.

CURL *pcurl = nullptr;
pcurl = curl_easy_init();

设置请求行和消息报头,消息body等。

//设置请求类型
curl_easy_setopt(pcurl, CURLOPT_CUSTOMREQUEST, "POST");

//设置请求头
curl_slist *plist = nullptr;

plist = curl_slist_append(plist, "Accept:");
plist = curl_slist_append(plist, "content_type:");

curl_easy_setopt(pcurl, CURLOPT_HTTPHEADER, plist);

//设置url
curl_easy_setopt(pcurl, CURLOPT_URL, url.c_str());


//设置附加信息
curl_easy_setopt(pcurl, CURLOPT_POSTFIELDSIZE, strlen(hello));
curl_easy_setopt(pcurl, CURLOPT_POSTFIELDS, hello);

设置获取接收返回的消息头和消息正文的方法,需要手动实现解析方法和设置接收信息的对象


size_t write_data(void *buffer,size_t size,size_t nmemb,void *userp)
{
	char *d = (char *)buffer;
	string *str = (string *)userp;

	if (str != nullptr)
	{
		str->append(d, size *nmemb);

		return size *nmemb;
	}
	return 0;
}


string header,result;

//设置头信息返回
curl_easy_setopt(pcurl, CURLOPT_HEADERFUNCTION, &write_data);
curl_easy_setopt(pcurl, CURLOPT_HEADERDATA, &header);

//设置信息返回
curl_easy_setopt(pcurl, CURLOPT_WRITEFUNCTION, &write_data);
curl_easy_setopt(pcurl, CURLOPT_WRITEDATA, &result);

进行http请求,请求完成后返回信息可以在内部实现的write_data中解析

int re = curl_easy_perform(pcurl);

是否句柄对象

//释放句柄
curl_easy_cleanup(pcurl);

 

总结:以上就是利用curl模块实现http请求的简单流程。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值