借助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;
}