C++中发送HTTP请求把数据上传

下面的代码是C++中发送HTTP请求代码:
1、PostConnect(CString url,const CString &strPara,CString &strContent, CString &strDescript)发送Http请求.url:要请求的地址,
strPara请求的参数.strContent 服务器返回的信息.strDescript程序执行信息.
2、可能请求中的参数有存在中文字符的关系,可能会存在乱码,所以附带了2个转码的方法。
下面贴出代码:
PostConn.h

#pragma once
#include "afxinet.h"

class CPostConn
{
public:
CPostConn();
~CPostConn();

public:
bool PostConnect(CString url,const CString &strPara,CString &strContent, CString &strDescript);
void GBKToUTF8(CString &strGBK);
void UTF8ToGBK(CString &str);
};

PostConn.cpp

#include "stdafx.h"
#include "PostConn.h"

CPostConn::CPostConn()
{

}

CPostConn::~CPostConn()<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于C++实现的HTTP服务器改进版源码+项目使用说明+详细注释.zip 1、技术架构 **本项目实现了基于Epoll管理连接、基于定时器处理非活动连接、基于线程池实现Reactor模式、基于cgi脚本处理http请求结果的HTTP服务器。主要框架如下:**\ ![](./image/newhttpd.jpg) 2、模块介绍 **1)主线程实现eventLoop**:主线程基于Reactor并通过Epoll管理,采用ET工作模式进行事件触发,事件注册包括监听、管道监控、读信息监控;\ **2)定时器处理非活动连接**:\ **①基于升序链表的定时器**:将每个需要监控的连接注册为一个时间结点,每个结点包括双向指针以及期待的时间和回调函数指针;包含添加、删除以及调整结点;回调函数主要实现对当前连接的close;\ **②基于信号和管道的定时事件处理**:建立监听数据集(新连接会加入一个数据集和时间结点,新信息读入会读取数据集并修改时间结点),基于sigaction形式实现对信号和信号处理函数的绑定,信号处理函数向管道发送信号消息,主线程监听到管道消息读入后判断信号类别,并进行关闭连接操作。\ **3)Http响应处理**:基于tinyhttpd进行修改,捕获GET、POST方法,基于cgi脚本(python撰写)实现post请求响应,基于多进程机制并通过双通道实现进程间通信,并用waitpid进行子进程管控。具体结构如下图所示:\ ![](./image/httpd.jpg) \ **4)线程池**:基于C++的生产者消费者模式的并发开发,具体技术运用如下:\ **①线程池底层结构**:线程池创建相当于消费者,队列添加相当于生产者,通过vector维护线程池,通过queue<function<>>维护任务队列;构造函数实现线程池创建并开始运行,enqueue函数实现消息队列,通过future实现异步工作的lambda函数的传递;\ **②同步机制实现**:基于unique_lock以及condition_variable实现同步和互斥,符合RAII原则;\ **5)简单客户端**:(可以通过浏览器进行服务端访问,也可以通过该客户端实现交互以及非活动连接处理的测试)\ **①基于POLL的IO复用**:对管道和连接进行事件监听和处理;\ **②基于双管道的简易CGI实现**:修改stdin的定向为管道写端,实现终端对客户端的直接输入和对服务端的发送;\ **6)改进方向**:待进行压力测试并提高抗压性能、可处理的HTTP请求较为简单(数据体的处理还待增加以及CGI功能的完善)、内存池。 3、编译使用 **服务端**:进入linux系统后,进入当前文件夹,首先修改可执行权限,然后通过CMake编译执行即可: ~~~c cd minghttp chmod 600 test.html chmod 600 post.html chmod +X post.cgi cd .. cmake . make ./httpserver ~~~ **客户端**:一方面可以通过浏览器直接进行服务器访问,一方面可以使用自己创建的客户端进行连接和消息互传(使用方案如下): ~~~c g++ simclient.cpp ./a.out ip port ~~~ ![](./image/out.jpg) 4、呈现效果 上一部分的图片已经展现定时器处理非活动连接的效果;\ 1)项目默认端口号为8000,ip地址需要通过ifconfig进行查看;\ 2)将ip和端口号进行替换输入,如下输入后可以得到如下界面:\ ![](./image/test.jpg)\ 3)POST的界面信息:\ ![](./image/jie.jpg)\ 4)POST的CGI脚本回显,基于python进行撰写,内容传输为html语言:\ ![](./image/cgi.jpg)\ 5)定时器的相关讯息也可以得到:可以看到5秒信号的定时器信息输出:\ ![](./image/jie1.jpg) 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值