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

简介: 纯C++实现的HTTP请求(POST/GET),支持windows和linux, 进行简单的封装, 方便调用。实现如下: #include "HttpConnect.h" #ifdef WIN32 #pragma comment(lib,"ws2_32.

纯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"); 

 

 

 
目录
相关文章
|
2月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
2月前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
2月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
2月前
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
3月前
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
142 1
|
3月前
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
226 0
|
4月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
5月前
automate Flow中如何用HTTP,POST的方式发送短信?
automate Flow中如何用HTTP,POST的方式发送短信?
55 2
|
6月前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
111 8
|
6月前
|
安全 Java 网络安全
RestTemplate进行https请求时适配信任证书
RestTemplate进行https请求时适配信任证书
165 3