C++ 实现Get和Post请求(亲测)

2023-05-16

废话不多说,直接上代码

//#include <stdlib.h>
#include "winsock2.h"
#include <string>
#include <iostream>
using namespace std;


#pragma comment(lib, "ws2_32.lib")
#define IPSTR "127.0.0.1" //服务器IP地址;
#define PORT 8080 //服务器端口;
#define BUFSIZE 1024

class httpClient {
		std::string host;
		std::string path;
		std::string post_content;
	public:
		std::string httpSend(std::string httpHeader);
		std::string httpGet(std::string host, std::string path);
		std::string httpPost(std::string host, std::string path,std::string post_content);
};
std::string httpClient::httpSend(std::string httpHeader) {
	//POST请求方式
	std::string ret = ""; // 返回Http Response
	// 开始进行socket初始化
	WSADATA wData;
	::WSAStartup(MAKEWORD(2, 2), &wData);
	SOCKET clientSocket = socket(AF_INET, 1, 0);
	struct sockaddr_in ServerAddr = {0};
	ServerAddr.sin_addr.s_addr = inet_addr(IPSTR);
	ServerAddr.sin_port = htons(PORT);
	ServerAddr.sin_family = AF_INET;
	int errNo = connect(clientSocket, (sockaddr*)&ServerAddr, sizeof(ServerAddr));
	if(errNo == 0) {
		errNo = send(clientSocket, httpHeader.c_str(), httpHeader.length(), 0);//发送头文件 
		if(errNo > 0)  {
			std::cout << "发送成功" << std::endl;
		} else {
			std::cout << "errNo:" << errNo << std::endl;
			return ret;
		}
		// 接收
		char bufRecv[3069] = {0};
		errNo = recv(clientSocket, bufRecv, 3069, 0);
		if(errNo > 0) {
			ret = bufRecv;// 如果接收成功,则返回接收的数据内容
			char *p;
			char *delims= {"\n"} ;
			p=strtok(bufRecv,"\n");
			int i = 0;
			while(p!=NULL) {
				if(i == 13){
//					printf("word: %s\n",p); //对获取的数据进行分割,获取每一行的数据 
					ret = p;
				}
				i++;
				p=strtok(NULL,delims);
			}
			return ret;
		} else {
			std::cout << "errNo:" << errNo << std::endl;
			return ret;
		}

	} else {
		errNo = WSAGetLastError();
		std::cout << "errNo:" << errNo << std::endl;
	}
	// socket环境清理
	::WSACleanup();
}
/** Get 请求 */
std::string httpClient::httpGet(std::string host, std::string path) {
	std::string httpHeader;
	httpHeader=
		"GET "+path+" HTTP/1.1\r\n"
        "Host: "+host+"\r\n"
        "User-Agent: IE or Chrome\r\n"
        "Accept-Type: */*\r\n"
        "Connection: Close\r\n\r\n";
    return httpSend(httpHeader);
}
/** Post 请求 */
std::string httpClient::httpPost(std::string host, std::string path,std::string post_content) {
	std::string httpHeader;
	char lenChar[16]; //这个长度根据需要吧
	sprintf(lenChar, "%d", post_content.length());
	std::string len(lenChar);
	httpHeader=
		"POST "+path+" HTTP/1.1\r\n"
       	"Host: "+host+"\n"
       	"Connection: Close\r\n"
       	"Content-Type: application/json\n"
       	"Content-Length: "+ len +"\n\n"
       	+post_content;
    return httpSend(httpHeader);
}
int main() {
	httpClient *http = new httpClient();
//	***********************GET*****************************	
	std::cout<<"Get:"<< http->httpGet("127.0.0.1:8080", "/admin") <<std::endl;
	
//	***********************POST*****************************
	std::string message=
		"{\"Type\":1, "
		" \"Dev\":1,\"Ch\":1, "
		" \"Data\":{ "
		" \"AlarmCh\":1,\"AlarmOutCount\":1,\"AlarmType\":1 "
		"}}";
	std::cout<<"POST:"<< http->httpPost("127.0.0.1:8080", "/withBody1",message)<<std::endl;
}

C语言版本:
https://blog.csdn.net/weixin_45721882/article/details/120932661

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 实现Get和Post请求(亲测) 的相关文章

随机推荐

  • Yolo框架简介

    YOLO xff08 You Only Look Once xff09 是一种基于深度神经网络的对象识别和定位算法 xff0c 其最大的特点是运行速度很快 xff0c 可以用于实时系统 现在YOLO已经发展到v4版本 论文地址 xff1a
  • Ubuntu下编辑权限只读文件的方法

    首先要注意的是只读文件一般都是系统文件 xff0c 或者软件配置文件 xff0c 修改时要尤其谨慎 本文提供两种方法 xff1a 方法一 首先安装一个插件 span class token function sudo span apt sp
  • Ros下Aruco模块的使用

    生成ARUCO ROS MARKER 链接 http chev me arucogen 首先启动ros roscore 打开相机节点 xff0c 在此提供usb相机与Realsense D435i的启动方法 xff1a roslaunch
  • 脚气、灰指甲治疗实验方案

    脚气 xff08 已临床实验 xff09 脚气 xff0c 又叫足廯 香港脚 糜烂性脚气 症状 xff1a 80 都是这种类型 常见于多汗人群 角质层被汗水浸软 xff0c 发白了以后 xff0c 走动不断摩擦表皮脱落 xff0c 露出鲜红
  • VS2015显示“正在从以下位置加载符号“的解决办法

    解决方法 xff1a VS 工具 选项 调试 符号 看到 MicroSoft符号服务器 xff0c 去掉方框中的 xff0c 确定即可 xff0c 之后就不会再调试时加载
  • 【面包】STM32学习笔记(二) --- USART 串口通信学习总结

    tip xff1a 如有错误 xff0c 希望指出 xff0c 非常感谢 xff01 目录 简介一 USART是什么 xff1f 二 问答通信方式1 USART和UART区别2 单工 半双工 全双工区别 三 代码实验1 说明2 代码初始化配
  • [论文阅读笔记] Reciprocal n-body Collision Avoidance(ORCA/RVO2)

    论文阅读 Reciprocal n body Collision Avoidance ORCA RVO2 文章目录 论文阅读 Reciprocal n body Collision Avoidance ORCA RVO2 论文地址Intro
  • 在VSCode中搭建C++编译环境

    在VSCode中搭建C 43 43 编译环境 VSCode当中搭建C 43 43 环境下载VSCode下载MinGW配置文件撰写测试小程序 VSCode当中搭建C 43 43 环境 vscode作为一款轻量级编程软件深受编程人员喜爱 xff
  • 【C++学习笔记】头文件详解

    个人整理学习用 xff0c 非教材 xff0c 有错误欢迎指正 头文件 究竟什么是头文件 xff1f 首先说明一个概念 xff0c 所谓的文件后缀并不是必须的 xff0c 在Linux下这种特点尤为明显 对于编译器来说 xff0c 无论是
  • 编程实现字符串连接函数strcat()

    按如下函数原型编程实现字符串连接函数strcat 的功能 void MyStrcat char dstStr char srcStr 输入提示信息 xff1a Input a string Input another string 输入字符
  • UDP通讯

    目录 利用DatagramSocket发送和接收UDP数据报 DatagramPacket构造方法说明 利用DatagramPacket和Datagramsocket简单实现服务器和客户端的通信 UDP协议通讯的用户状态跟踪 利用Datag
  • ubuntu 下C/C++文件编写

    1 Ubuntu下c cpp文件 1 1 cmake方式编译 cmake通常建立CmakeLists txt xff0c 通过cmake命令生成makefile文件编译工程 文件内容 xff1a span class token numbe
  • C语言基础入门:链表详解篇

    链表概述 链表是一种常见的重要的数据结构 它是动态地进行存储分配的一种结构 它可以根据需要开辟内存单元 链表有一个 头指针 变量 xff0c 以head表示 xff0c 它存放一个地址 该地址指向一个元素 链表中每一个元素称为 结点 xff
  • Linux c udp广播

    文章目录 1 对比2 代码2 1 服务端2 2 客户端 1 对比 服务端 xff1a 需要利用这个函数开发套接字的发广播权限 xff0c 并且需要客户端地址绑定为广播地址 span class token function setsocke
  • React—— HelloWorld

    React 学习笔记 Hello WorldJSX JavaScript XML 语法规则JavaScript 语法函数组件 类组件 amp 属性 props组合组件 生命周期函数 xff08 不全 xff09 amp 状态 state事件
  • Linux下makefile 编译项目

    文章目录 1 规划makefile编写2 makefile文件2 1 根目录下common mk2 2 config mk2 3 根目录makefile 2 4 其他目录下 1 规划makefile编写 a 根目录下放三个文件 xff1a
  • RPLIDAR激光雷达测试

    本文主要介绍PRLIDAR A2M8 R2激光雷达的的测试过程 关于该激光雷达的具体参数和描述 xff0c 可以直接去官网查询 本文的测试环境为Ubantu16 04 ROS xff08 kinetic xff09 关于Ubantu16 0
  • 【ROS机器人入门】1.1 ROS概念及环境配置

    文章目录 ROS设计目标系统要求配置步骤1 设置安装源2 设置ROS软件Key3 更新软件包4 安装完整版ROS Noetic软件5 配置ROS环境6 安装构建依赖7 1 安装rosdep 7 1与7 2任选其一 解决方法 7 2 安装ro
  • 纯C语言进行Get和Post请求(亲测)

    废话不多说 xff0c 直接上代码 span class token macro property span class token directive hash span span class token directive keywor
  • C++ 实现Get和Post请求(亲测)

    废话不多说 xff0c 直接上代码 span class token comment include lt stdlib h gt span span class token macro property span class token