C++ 实现简单Http客户端

借助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}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang