C++ 实现简单Http客户端--使用 curl网络库

社会主义新天地 提交于 2020-08-18 21:33:14

借助curl网络库实现Http客户端,一种get请求,一种post请求。

//get请求
#include <stdio.h>
#include <stdlib.h>
#include <curl.h>

/*
* ptr      表示收到服务器返回数据的首地址
* size     表示返回每个数据的大小
* nmemb    表示返回数据的个数
* userdata 用户给该回调函数传递的形参   curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc"); 设置的字符串"abc"
*          这个可以用来标识传输命令 返回的数据 来自命令 "abc",根据这个命令来处理这个数据
*/
size_t write_callback(char *ptr, size_t size, size_t nmemb, void* userdata) {
	long sizes = size * nmemb;

	char* recv = new char[sizes];
	memcpy(recv, (char*)ptr, sizes);//复制传过来的数据

	printf("传过来的数据: %s", recv);

	return sizes;
}

int main(void) {

	//1. 创建一个curl句柄
	CURL* curl = nullptr;
	CURLcode res;

	//2. 初始化一个curl句柄
	curl = curl_easy_init();

	//3. 给该句柄设定一些参数 (封装一个http请求消息)  "127.0.0.1", "/login", "id=liukang&pw=123"
	curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8892/login?id=liukang&pw=123"); //http://www.baidu.com
	//curl_easy_setopt(curl, CURLOPT_URL, "http:/101.200.190.150:8090/login?username=123&passwd=445");

	//给当前句柄设置一个 处理从服务器返回数据的回调函数
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

	//给回调函数传递一个形参
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc");

	//4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值
	res = curl_easy_perform(curl);  //阻塞等待服务器返回
	if(res != CURLE_OK) {
		printf("curl easy perform error res = %d\n", res);
		return 1;
	}

	//5. 处理服务器返回数据

	//6. 清空 释放句柄内存空间
	curl_easy_cleanup(curl);

	return 0;
}

//    post请求 

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

#define POSTDATA   "{\"username\" : \"gailun\", \"password\" : \"123123\"}"

int main(void) {

//1. 创建一个curl句柄
CURL* curl = nullptr;
CURLcode res;

//2. 初始化一个curl句柄
curl = curl_easy_init();

if(nullptr == curl) {
printf("curl init error");
return 0;
}

//3. 给该句柄设定一些参数 (封装一个http请求消息)
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8888"); //http://www.baidu.com

//给当前curl变成post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);

//给当前curl设置需要传递post数据
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTDATA);

//4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值
res = curl_easy_perform(curl);  //阻塞等待服务器返回
if(res != CURLE_OK) {
printf("curl easy perform error res = %d\n", res);
return 1;
}

//5. 处理服务器返回数据

//6. 清空 释放句柄内存空间
curl_easy_cleanup(curl);

return 0;
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!