纯C++实现的HTTP请求(POST/GET)

2023-05-16

原文地址:http://www.cnblogs.com/lidabo/p/6404533.html

纯C++实现的HTTP请求(POST/GET),支持windows和linux, 
进行简单的封装, 方便调用。实现如下:

#include "HttpConnect.h"

#ifdef WIN32
#pragma comment(lib,"ws2_32.lib")
#endif

HttpConnect::HttpConnect()
{
#ifdef WIN32
    //此处一定要初始化一下,否则gethostbyname返回一直为空
    WSADATA wsa = { 0 };
    WSAStartup(MAKEWORD(2, 2), &wsa);
#endif
}

HttpConnect::~HttpConnect()
{

}
void HttpConnect::socketHttp(std::string host, std::string request)
{
    int sockfd;
    struct sockaddr_in address;
    struct hostent *server;

    sockfd = socket(AF_INET,SOCK_STREAM,0);
    address.sin_family = AF_INET;
    address.sin_port = htons(80);
    server = gethostbyname(host.c_str());
    memcpy((char *)&address.sin_addr.s_addr,(char*)server->h_addr, server->h_length);

    if(-1 == connect(sockfd,(struct sockaddr *)&address,sizeof(address))){
        DBG <<"connection error!"<<std::endl;
        return;
    }

    DBG << request << std::endl;
#ifdef WIN32
    send(sockfd, request.c_str(),request.size(),0);
#else
    write(sockfd,request.c_str(),request.size());
#endif
    char buf[1024*1024] = {0};


    int offset = 0;
    int rc;

#ifdef WIN32
    while(rc = recv(sockfd, buf+offset, 1024,0))
#else
    while(rc = read(sockfd, buf+offset, 1024))
#endif
    {
        offset += rc;
    }

#ifdef WIN32
    closesocket(sockfd);
#else
    close(sockfd);
#endif
    buf[offset] = 0;
    DBG << buf << std::endl;

}

void HttpConnect::postData(std::string host, 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-Length:" << post_content.length()<<"\r\n"; stream << "Connection:close\r\n\r\n"; stream << post_content.c_str(); socketHttp(host, stream.str()); } void HttpConnect::getData(std::string host, 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"; socketHttp(host, stream.str()); }

 

调用方法:

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

 

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

纯C++实现的HTTP请求(POST/GET) 的相关文章

  • 使用 AJAX 获取特定 DOM 元素(使用 Javascript,而不是 jQuery)

    如何使用 AJAX 用简单的 JavaScript 语言 NOTjQuery 获取页面 同一域 并仅显示特定的 DOM 元素 比如id为 bodyContent 标记的DOM元素 我正在使用 MediaWiki 1 18 所以我的方法必须稍
  • 从 HTML 表单发送数据到 Node.js 服务器

    我正在学习 Node js 我的服务器中有这个 var http require http var url require url http createServer function request response response w
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • WordPress 标题中的 & 符号破坏了我对社交媒体链接的共享

    我希望得到一些帮助来解决一些让我发疯的编码问题 我最好在我的 WordPress 帖子标题中写 而不是 and 但是写出 符号会破坏我们在 twitter facebook 和 google plus 上的帖子共享链接 Facebook 能
  • 如何在 Laravel 中禁用 JSON 响应的分块编码?

    我从 Laravel 中的控制器方法返回一个数组 Laravel 将此解释为我想发送 JSON 这很好 但它没有设置Content Length并改为使用Transfer Encoding chunked 我的回复很小 所以我不想把它们分块
  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 为什么在发出带有发布数据的请求后,PHP 中的 $_POST 数组为空

    我使用发布数据向页面 getremote php 发出发布请求 但 POST 数组似乎为空 如果有人能告诉我我做错了什么 我将不胜感激 发出请求的 JavaScript 代码是 var postdata Content Type appli
  • 发送压缩文件 Spring

    我想通过我的 spring 控制器发送一个已经存在的压缩文件 但我不断收到这些错误消息org springframework web HttpMediaTypeNotAcceptableException Could not find ac
  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • Node.JS Web 服务器中的安全性

    所以 我正在学习 Node JS 到目前为止我很喜欢它 我已经有几个项目在工作了 我想我可以在其中使用nodejs 不过 我担心安全问题 如果我使用 Node JS http 模块编写自定义 Web 服务器 我是否可能非常容易受到攻击 Ap
  • 使用 jQuery 将值发送到 $_GET

    我正在使用一个 PHP 脚本 该脚本正在通过 GET 等待两个值 我正在尝试使用 jQuery 传递这两个值 而这正是我不太擅长的地方 这是我得到的代码 有人能指出我正确的方向吗 谢谢 function xrate id rating aj
  • 不允许使用 HTTP 谓词 POST 来访问路径“[我的路径]”

    我收到一条错误 指出 不允许使用 HTTP 动词 POST 来访问路径 我的路径 该错误是由于我正在实现一个使用 POST 方法的 HTML 表单元素并且未在其 ACTION 参数中显式定义 aspx 页面而引起的 例如
  • AJAX .post 异步

    以下具体执行什么操作 ajax type POST async false vs ajax type POST async true 这意味着行为有什么区别 From jQuery 站点 http api jquery com jQuery
  • 将多个文件上传到服务器并

    我的第一篇文章所以要温柔 我尝试过搜索此内容 并且有很多类似的帖子 但我似乎找不到任何与我的问题完全相似的内容 而且我已经在这个问题上花了几个小时了 我正在用 PHP 5 3 和 MySQL 构建一个系统 部分功能是要求用户根据之前的一些选
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach
  • HTTP请求压缩

    一般用例 想象一下一个正在上传大量 JSON 的客户端 内容类型应保留application json因为这描述了实际数据 Accept Encoding 和 Transfer Encoding 似乎是为了告诉服务器应该如何格式化响应 看起
  • 通过 http 的私有 git 存储库

    你能推荐任何简单的解决方案来设置可通过http s cleutus建议的 访问的git存储库吗 我有自己的 http 服务器 我想用它来托管一些小型私人项目 在家里我可以通过 ssh 连接 但在工作中防火墙阻止我这样做 有没有免费的方法来设
  • $_POST 不包含所有数据

    几天前 我们的一家网上商店遇到了问题 Gambio基于xtC 我们有一个包含 3000 多个文本字段的公式 其中大约前三分之一工作正常 其余的都是空的 看来 POST 已正确填充 但在服务器上 应用程序获得了一个缩减的数组 我在不同的计算机
  • Rails - map.resources 的冗余 RESTFUL 操作? (新建、创建)

    我想知道为什么当您使用 map resources 在 Rails 中创建静态路线时 它会生成以下操作 新建 创建 编辑 更新 只声明一项行动有什么问题吗 create and update并做这样的事情 def create unless

随机推荐

  • 驱动开发了解下

    目录 前提环境说明网络环境网络环境1网络环境2 启动开发板 xff0c tftp下载内核和驱动 xff0c nfs挂载文件系统开发流程1编写驱动程序修改Makefile编译创建拷贝加载驱动modprobe加载驱动depmod查看当前系统中存
  • Linux系统的启动流程---常见面试题

    系统启动流程 xff1a centos6 01 加电自检 检查服务器硬件是否正常 02 MBR引导 读取磁盘的MBR存储记录信息 xff0c 引导系统启动 03 grup菜单 选择启动的内核 进行单用户模式重置密码 04 加载系统内核信息
  • C语言——进阶冒泡&&回调函数

    C语言 进阶冒泡 amp amp 回调函数 1 模仿qsort的功能实现一个通用的冒泡排序 span class token macro property span class token directive keyword include
  • 五.树莓派4B-安装常用软件

    安装vim xff1a vi和vim与nano gedit都是Linux系统的文档编辑器 xff0c 类似于windows系统的文本文档编辑器一样 xff0c 其中vi编辑器是最常用的 xff0c 同时在Linux系统中编写各类型语言的代码
  • JS节点操作

    节点概述 1 在JS中节点可分为父节点 子节点 兄弟节点 又可分为元素节点 属性节点 文本节点 2 节点至少拥有三个基本属性 xff0c nodeType 节点类型 xff09 nodeName 节点名称 xff09 nodeValue 节
  • C++ 之运算符重载规则

    运算符重载的规则 1 C 43 43 中大部分运算符允许重载 xff0c 不能重载的运算符只有少数几个 2 C 43 43 语言中只能对已有的运算符进行重载 xff0c 不允许用户自己定义新的运算符 3 运算符重载是针对新类型数据的实践需要
  • dispatch for POST “/error“, parameters={masked}

    dispatch for POST 34 error 34 parameters 61 masked dispatch for POST error parameters 61 masked 这个问题有好几个可能 xff0c 第一你的Req
  • Putty连接虚拟机提示: Network error: Connection refused

    服务器版本 Ubuntu 20 04 Putty连接服务端时提示Network error Connection refused时 如下图 客户端使用 telnet 命令连接服务端 也提示连接拒绝 如下图 这个时候需要登录服务端 执行以下命
  • 震惊!物联网应用2018在中国爆发 产业、技术、渠道三剑齐发

    物联网时代 xff0c 给了中国赶超美国的机会 原因在于 xff0c 物联网的发展应用 xff0c 需要技术 生态 渠道 市场等多重环节的支撑 在这几个环节中 xff0c 美国主要占据技术优势 xff0c 而中国在技术方案 生态建设 渠道开
  • PX4无人机调试技术文档

    PX4无人机调试技术文档 一 硬件部分 1 调整电机序号 转向以及螺旋桨姿态 xff0c 螺旋桨较高一侧为迎风侧 xff0c 并使四个桨处于同一平面 xff08 下图为X型四旋翼无人机DEMO xff09 2 正确接线 二 QGroundC
  • 关于跟随ROS一同安装的OpenCV的卸载与重新安装

    近日由于需要做一个SLAM相关的工程 xff0c 开始研究ORB SLAM3 xff0c 但是编译的时候发现自行安装的OpenCV版本与安装ROS时一同二进制安装的OpenCV版本出现了冲突 xff0c 于是查询了资料 xff0c 更改cv
  • warning: Clock skew detected. Your build may be incomplete.解决方案

    发生这件事情的主要原因是 xff1a 切换双系统的时候调整了Windows的时钟 xff0c 导致Ubuntu的时钟受到影响 确切地讲 xff0c 就是时钟错位了 解决 xff0c 也不需要用太复杂的方法 xff0c 就重新编译一下即可 x
  • 【计算机操作系统】(三)系统调用

    一 系统调用 用户接口分为命令接口 xff08 允许用户直接使用 xff09 和程序接口 xff08 允许用户通过程序间接使用 xff09 程序接口由一种系统调用组成 系统调用 是操作系统提供给应用程序 xff08 程序员 xff09 使用
  • ORA-28000错误的原因及解决办法

    当用Oracle数据库的时候 xff0c Oracle数据库时提示 ORA 28000 xff1a 帐号被锁定 导致出现改错误的原因是 xff1a 在oracle database 11g中 xff0c 默认在default概要文件中设置了
  • 常见的通信协议

    1 iic协议 物理层 特点 xff1a 1 支持多设备连接 xff0c 支持多通讯主机和从机 2 scl时钟线 sda数据线 所以是同步通信 3 通过地址访问不同设备 4 多主机使用时 xff0c 会使用仲裁方式选哪个设备 5 总线上使用
  • 计算机操作系统知识点总结(2.1.2)——进程的状态与转换

    进程的三种基本状态 xff1a xff08 1 xff09 运行态 xff1a 占有CPU xff0c 并在CPU上运行 xff08 单核处理机每一时刻最多只能有一个进程处于运行态 xff0c 双核环境下可以同时有两个进程处于运行态 xff
  • Daily practice——2021/1/31

    1 函数若无返回值 则它一定无形参 请问这个说法是正确的吗 xff1f 答 xff1a 这个说法不正确 一个函数可以有参数 xff0c 没有返回值 xff1b 可以没有参数 xff0c 有返回值 xff1b 可以没参数 xff0c 没返回值
  • 6.RTT-UART-串口接收不定长数据

    本期来分析一下串口接受不定长度数据的源码 xff0c 这个demo也在手册里面 xff0c 可以去手册上结合着API说明观看 先把代码粘出来 xff0c 后面对重点代码进行分析 程序清单 xff1a 这是一个串口设备接收不定长数据的示例代码
  • learn-AJAX(第一天)

    AJAX的简介 一 简介及其简单使用 1 概述 web程序最初的目的就是将信息放到公共的服务器上 xff0c 让所有的网络用户都可以通过浏览器进行访问 在此之前 xff0c 通过以下的方式可以使浏览器对服务器发送请求 xff08 无法通过编
  • 纯C++实现的HTTP请求(POST/GET)

    原文地址 xff1a http www cnblogs com lidabo p 6404533 html 纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0