借助curl网络库实现Http客户端,一种get请求,一种post请求。
1//get请求 2#include <stdio.h> 3#include <stdlib.h> 4#include <curl.h> 5 6/* 7* ptr 表示收到服务器返回数据的首地址 8* size 表示返回每个数据的大小 9* nmemb 表示返回数据的个数 10* userdata 用户给该回调函数传递的形参 curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc"); 设置的字符串"abc" 11* 这个可以用来标识传输命令 返回的数据 来自命令 "abc",根据这个命令来处理这个数据 12*/ 13size_t write_callback(char *ptr, size_t size, size_t nmemb, void* userdata) { 14 long sizes = size * nmemb; 15 16 char* recv = new char[sizes]; 17 memcpy(recv, (char*)ptr, sizes);//复制传过来的数据 18 19 printf("传过来的数据: %s", recv); 20 21 return sizes; 22} 23 24int main(void) { 25 26 //1. 创建一个curl句柄 27 CURL* curl = nullptr; 28 CURLcode res; 29 30 //2. 初始化一个curl句柄 31 curl = curl_easy_init(); 32 33 //3. 给该句柄设定一些参数 (封装一个http请求消息) "127.0.0.1", "/login", "id=liukang&pw=123" 34 curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8892/login?id=liukang&pw=123"); //http://www.baidu.com 35 //curl_easy_setopt(curl, CURLOPT_URL, "http:/101.200.190.150:8090/login?username=123&passwd=445"); 36 37 //给当前句柄设置一个 处理从服务器返回数据的回调函数 38 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); 39 40 //给回调函数传递一个形参 41 curl_easy_setopt(curl, CURLOPT_WRITEDATA, "abc"); 42 43 //4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值 44 res = curl_easy_perform(curl); //阻塞等待服务器返回 45 if(res != CURLE_OK) { 46 printf("curl easy perform error res = %d\n", res); 47 return 1; 48 } 49 50 //5. 处理服务器返回数据 51 52 //6. 清空 释放句柄内存空间 53 curl_easy_cleanup(curl); 54 55 return 0; 56} 57 58 59 60// post请求 61 62#include <stdio.h> 63#include <stdlib.h> 64#include <curl.h> 65 66#define POSTDATA "{\"username\" : \"gailun\", \"password\" : \"123123\"}" 67 68int main(void) { 69 70//1. 创建一个curl句柄 71CURL* curl = nullptr; 72CURLcode res; 73 74//2. 初始化一个curl句柄 75curl = curl_easy_init(); 76 77if(nullptr == curl) { 78printf("curl init error"); 79return 0; 80} 81 82//3. 给该句柄设定一些参数 (封装一个http请求消息) 83curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8888"); //http://www.baidu.com 84 85//给当前curl变成post请求 86curl_easy_setopt(curl, CURLOPT_POST, 1); 87 88//给当前curl设置需要传递post数据 89curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTDATA); 90 91//4. 将curl句柄 向远程服务器 提交请求 并得到一个返回值 92res = curl_easy_perform(curl); //阻塞等待服务器返回 93if(res != CURLE_OK) { 94printf("curl easy perform error res = %d\n", res); 95return 1; 96} 97 98//5. 处理服务器返回数据 99 100//6. 清空 释放句柄内存空间 101curl_easy_cleanup(curl); 102 103return 0; 104}