C++, 简单 http 下的 POST 和 Get

#pragma once
#include <Windows.h>
#include <winsock.h>
#include <sstream>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")class WinHttp
{
public:WinHttp(){//此处一定要初始化一下,否则gethostbyname返回一直为空;WSADATA wsa = { 0 };if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){std::cout << "init WSADATA failed!" << std::endl;}}~WinHttp(){}public:void PostData(std::string host, int port, std::string path, std::string post_content){//POST请求方式;std::stringstream stream;stream << "POST " << path;stream << " HTTP/1.0\r\n";stream << "Host: " << host << "\r\n";stream << "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n";//stream << "Content-Type:application/x-www-form-urlencoded\r\n";stream << "Content-Type:application/json\r\n";stream << "Content-Length:" << post_content.length() << "\r\n";stream << "Connection:close\r\n\r\n";stream << post_content.c_str();Http(host, port, stream.str());}void GetData(std::string host, int port, std::string path, std::string get_content){//GET请求方式;std::stringstream stream;stream << "GET " << path << "?" << get_content;stream << " HTTP/1.0\r\n";stream << "Host: " << host << "\r\n";stream << "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n";stream << "Connection:close\r\n\r\n";Http(host, port, stream.str());}private:void Http(std::string host, int port, std::string request){int sockfd;struct sockaddr_in address;sockfd = socket(AF_INET, SOCK_STREAM, 0);address.sin_family = AF_INET;address.sin_port = htons(port);address.sin_addr.S_un.S_addr = inet_addr(host.c_str()); //直接填写地址;/*struct hostent *server = gethostbyaddr(host.c_str(), host.size(), AF_INET);//struct hostent *server = gethostbyname(host.c_str());if (!server){switch (h_errno){case HOST_NOT_FOUND:fputs("The host was not found.\n", stderr);break;case NO_ADDRESS:fputs("The name is valid but it has no address.\n", stderr);break;case NO_RECOVERY:fputs("A non-recoverable name server error occurred.\n", stderr);break;case TRY_AGAIN:fputs("The name server is temporarily unavailable.", stderr);break;default:break;}std::cout << "gethostbyaddr(...) failed!" << std::endl;return;}memcpy((char *)&address.sin_addr.s_addr, (char*)server->h_addr, server->h_length);*/if (-1 == connect(sockfd, (sockaddr *)&address, sizeof(address))){std::cout << host << ":" << port << " connection failed!" << std::endl;return;}//std::cout << request << std::endl;send(sockfd, request.c_str(), request.size(), 0);char buf[1024 * 2] = { 0 }; //不能设置过大,否则会栈溢出,如果必须设置较大,用堆new;//char *buf = new char(1024 * 1024);int offset = 0;int rc;while (rc = recv(sockfd, buf + offset, 1024, 0)){offset += rc;}buf[offset] = 0; //最后结束符;closesocket(sockfd); //断开;std::cout << "recv: " << buf << std::endl;//delete[] buf;}inline char* UnicodeToUtf8(const wchar_t* unicode){ // Unicode 转 UTF-8int len;len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);char *szUtf8 = (char*)malloc(len + 1);memset(szUtf8, 0, len + 1);WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);return szUtf8;}
};

使用方法如下:


WinHttp *http = new WinHttp();
http->getData("127.0.0.1", 8080, "/login", "id=admin&pw=123");
http->postData("127.0.0.1", 8080, "/login","id=admin&pw=123");

当然,前题要有Web后台; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从Mac电脑恢复任何删除的视频

Microsoft Office是包括Mac用户在内的人们在世界各地创建文档时使用的最佳软件之一。该软件允许您创建任何类型的文件&#xff0c;如演示文稿、帐户文件和书面文件。您可以使用 MS Office 来完成。所有Microsoft文档都可以在Mac上使用。大多数情况下&#xff0c;您处理文档&…

手搓堆(C语言)

Heap.h #pragma once#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <stdbool.h> #include <string.h> typedef int HPDataType; typedef struct Heap {HPDataType* a;int size;int capacity; }Heap;//初始化 void Heap…

node.js中的fs模块,读写语法讲解

本文分享node.js的入门知识&#xff0c;使用 fs 模块封装的方法读写文件内容 node中的fs 模块&#xff1a;封装了与本机文件系统进行交互的&#xff0c;方法和属性&#xff0c;使用语法如下&#xff1a; 1、加载 fs 模块&#xff0c;得到 fs 对象 const fs require(fs) 2、…

软件工程习题答案2024最新版

习题一答案 一、选择题 软件的主要特性是(A B C)。 A) **无形 **B) 高成本 C) **包括程序和文档 ** D) 可独立构成计算机系统 软件工程三要素是(B)。 A) 技术、方法和工具 B) 方法、工具和过程 C) 方法、对象和类 D) 过程、模型、方法 包含风险分析的软件工程模型是(A)…

Java注解处理器:自定义注解的自动化处理

引言 在Java编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种重要的元数据&#xff0c;它为代码提供了额外的信息。注解处理器&#xff08;Annotation Processor&#xff09;是Java编译过程中的一部分&#xff0c;它可以在编译时期读取注解信息并执行特定的处…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一&#xff0c;它直接影响着烟叶的口感、香气和理化特性。传…

python基础算法题0502

数字反转 无论是字符串反转还是数字反转&#xff0c;其实都一样。 需求 代码 class Solution:def reverse(self, x: int) -> int:if 0 < x < 2 ** 31 - 1:m str(x)[::-1]if int(m)<2**31-1:return int(m)else:return 0if 0 > x > -2 ** 31:y -xn str(y…

uniapp 监听APP切换前台、后台插件 Ba-Lifecycle

监听APP切换前台、后台 Ba-Lifecycle 简介&#xff08;下载地址&#xff09; Ba-Lifecycle 是一款uniapp监听APP切换前台、后台的插件&#xff0c;简单易用。 截图展示 也可关注博客&#xff0c;实时更新最新插件&#xff1a; uniapp 常用原生插件大全 使用方法 在 script…

华为机考入门python3--(19)牛客19- 简单错误记录

分类&#xff1a;字符串 知识点&#xff1a; 分割字符串 my_str.split(\\) 字符串只保留最后16位字符 my_str[-16:] 列表可以作为队列、栈 添加元素到第一个位置 my_list.insert(0, elem) 增加元素到最后一个位置 my_list.append(elem) 删除第一个 my_list.pop(0)…

SAP_SD模块-销售批次策略应用记录

一、销售批次查找策略的重要性 批次查找策略允许企业在销售过程中根据预定义的规则自动选择最适合的产品批次。这种策略的实施&#xff0c;对企业尤其是那些涉及到严格产品质量与安全标准的行业&#xff08;如食品、药品及化工产品&#xff09;具有以下几方面的重要意义&#x…

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.0

参考网址&#xff1a;【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中&#xff0c;实现类似《原神》的第三人称跟随相机并非易事&#xff0c;但幸运的是&#xff0c;Unity为我们提供了强大的工具集&#xff0c;其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

从键入网址到网页显示,期间发生了什么?

从键入网址到网页显示&#xff0c;期间发生了什么&#xff1f; 孤单小弟【HTTP】真实地址查询【DNS】指南帮手【协议栈】可靠传输【TCP】远程定位【IP】两点传输【MAC】出口【网卡】送别者【交换机】出境大门【路由器】互相扒皮【服务器与客户端】相关问答 不少小伙伴在面试过程…

常用外贸营销软件推荐

在外贸营销中&#xff0c;选择合适的软件工具可以极大地提高工作效率和营销效果。以下是一些常用的外贸营销软件推荐&#xff1a; 易谷歌地图数据采集大师&#xff1a;专为做外贸的朋友开发的一款基于谷歌地图数据采集的软件&#xff0c;可以采集任意国家、任意地区的公司地址、…

《21天学通C++》(第十五章)标准模板库简介

本章简单介绍STL容器、迭代器和算法的基本概念&#xff0c;之后几章会分别详述 1.STL容器 STL容器是STL中用于存储集合数据的组件&#xff0c;它们可以被看作是模板类&#xff0c;允许开发者定义特定类型的容器发&#xff0c;这里按照C11标准分为四类&#xff1a;顺序容器、关…

Qt5 框架学习及应用 — 对象树

Qt 对象树 对象树概念Qt为什么使用对象树 &#xff1f;将对象挂到对象树上 对象树概念 对象树&#xff1a;对于树的概念&#xff0c;相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树………

ubuntu-meta-22.04桌面版+ros2-humble 镜像

ubuntu-meta-22.04桌面版ros2-humble 镜像 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1PSBe4EqWch44OQUlkCCEig?pwdknty 提取码&#xff1a;knty 镜像文件较大&#xff0c;分成了两个压缩包&#xff0c;下载后直接解压ubuntu22.04-desk-meta-ros2-arm (…

vue处理查询框清除后无法查询问题,举例为日期选择

例如 在对应的查询方法添加 //我这里获取的是date&#xff0c;如果是其他参数改为其他的即可 if (query.date && query.date.length > 2) {conditions.noedate query.date[0] || conditions.noedate;//获取开始时间conditions.twodate query.date[1] || conditi…

数据库漫谈-发展简史

数据管理最早都是开发者自行定义的&#xff0c;应用和数据管理是一体的&#xff0c;没有独立的数据管理系统。1961年为了支持阿波罗计划的执行&#xff0c;IBM开发了ICS数据库&#xff0c;这是个层次数据库&#xff0c;是最早的大型数据库。另一个巨头GE公司看到ICS的问题&…

实验14 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。【参考课本 例1 】 三、源代码以及执行结果截图&#xff1a; example7_1.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "ut…

PHP医院安全(不良)事件报告系统源码 vue2+element支持11大类不良事件上报、审核处理、分析改进

PHP医院安全&#xff08;不良&#xff09;事件报告系统源码 vue2element支持11大类不良事件上报、审核处理、分析改进 医院安全&#xff08;不良&#xff09;事件管理系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为…