c++实现web服务器数据收发

利用微软标准API实现web服务器数据的发送和接受,遇到的问题点:
1.句柄创建
CString strMsg;
int iError = 0;
HINTERNET hint;
HINTERNET hftp;
HINTERNET hconnect;
HINTERNET Openhconnect;
hint = InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY/INTERNET_OPEN_TYPE_PRECONFIG/, 0, 0, 0);
2.建立连接,获得连接句柄
hconnect = InternetConnect(hint, m_strFTPIP, m_iFTPPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if(hconnect==NULL)
{
iError = GetLastError();
InternetCloseHandle(hint);
AfxMessageBox(_T(“连接失败”));
return;
}
3.创建查询句柄,使用POST方式,这里需要注意,m_strURL这个地址,不是完整的地址,而是IP,端口之后的内容,以/开头的内容,而且必须带"/“.例如
http://10.192.10.123:500/api/testMark,那么这里的strURL就是”/api/testMark"
LPCTSTR szAccept[] = {_T(“/”), NULL};
DWORD dwFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE;
Openhconnect= HttpOpenRequest(hconnect,L"POST",m_strUrl, HTTP_VERSION/_T(“HTTP/1.1”)/,NULL,szAccept,dwFlags/INTERNET_FLAG_SECURE/,0);
iError=GetLastError();
4.设置http解析的header信息,主要包括字符集,主机,源地址,和Referer,这里需要注意,win10系统,只需要前两项就可以正常访问,win7系统需要全部设置,否者查询状态时候一直返回400或404错误代码,主要就是解析header出了问题,找不到解析数据,因此返回404.
//win10 只需要前两个header设置就可以了
TCHAR headerLanguage[] = _T(“Accept: application/json”);
TCHAR headerCharset[] = _T(“Accept-Charset: utf-8”);
//win7系统需要加上下面三个header
TCHAR headerHost[] = _T(“Host: 10.16.11.11:5003”😉;
TCHAR headerOrigin[] = _T(“Origin: http://10.16.11.61:5003”😉;
TCHAR headerReferer[] = _T(“Referer: http://10.16.11.11:5003/api/testMark”);

		ret=  HttpAddRequestHeaders(Openhconnect,headerLanguage, -1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);ret=  HttpAddRequestHeaders(Openhconnect,m_strHead,m_strHead.GetLength(),HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);ret=  HttpAddRequestHeaders(Openhconnect,headerCharset, -1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);ret = HttpAddRequestHeaders(Openhconnect, headerHost, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   ret = HttpAddRequestHeaders(Openhconnect, headerOrigin, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   ret = HttpAddRequestHeaders(Openhconnect, headerReferer, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   

5.发送接口函数内容,格式按照接口函数给的数据就好了有json数据,xml数据,文本数据,可以根据需要自行设置,这里需要转换一下,否者会发送失败.返回12029原因是IE没有设置TLS1.0,TLS1.1,TLS1.2,TLS1.3,有的美颜装IE,也需要安装下,全部勾选就好了,设置方法:控制面板—Internet选项—高级属性—安全选项卡----找到TLS1.0,TLS1.1,TLS1.2,TLS1.3,全部勾选
char utf8PostData[128] = {0};
USES_CONVERSION;
const char* pC = T2A(strCmd);//注意PC指向区域在栈空间
strcpy(utf8PostData, pC);
ret= HttpSendRequest(Openhconnect,0,0,utf8PostData,strlen(utf8PostData));
iError=GetLastError();
6.读取web服务器返回状态码
TCHAR szBuff[1024] = {0};
DWORD dwBuffSize = 1024;
BOOL bRet;
bRet = ::HttpQueryInfo(Openhconnect, HTTP_QUERY_STATUS_CODE, (LPVOID)szBuff, &dwBuffSize, NULL);
iError = ::GetLastError();//返回0
继续查询其他信息可以激活查询获取,然后读取数据即可:
if (bRet)
{
TCHAR szBuff[1024+1] = {0};
DWORD dwBuffSize = 1024*sizeof(szBuff);
bRet = ::HttpQueryInfo(Openhconnect, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)szBuff, &dwBuffSize, NULL);

				memset(szBuff, 0, sizeof(szBuff));   dwBuffSize = 1024*sizeof(szBuff);   bRet = ::HttpQueryInfo(Openhconnect, HTTP_QUERY_DATE, (LPVOID)szBuff, &dwBuffSize, NULL);   memset(szBuff, 0, sizeof(szBuff));   dwBuffSize = 1024*sizeof(szBuff);   bRet = ::HttpQueryInfo(Openhconnect, HTTP_QUERY_SERVER, (LPVOID)szBuff, &dwBuffSize, NULL);   memset(szBuff, 0, sizeof(szBuff));   dwBuffSize = 1024*sizeof(szBuff);   bRet = ::InternetReadFile(Openhconnect, szBuff, dwBuffSize, &dwBuffSize);   } 

这样我们就可以和web服务器完成POST方式数据上传以及查询返回结果,如果需要继续解析数据,可以读取数据分析.

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

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

相关文章

7、广告-用户识别与ID映射

一、用户识别原理 程序化广告生态系统是以数据为核心的生态系统,要实现精准的受众定向,首先需要进行单用户的识别。在PC端,常用Cookie作为用户标识,为用户打上标签的技术被称为“种Cookie”。 Cookie的作用与局限性 生命周期短&a…

ms17-010 ms12-020 ms-08-067

MS17-010是一个由微软发布的安全公告编号,它指代了一个严重级别的安全漏洞,该漏洞存在于Microsoft Windows的Server Message Block 1.0 (SMBv1)协议处理中。这个漏洞被命名为“永恒之蓝”(EternalBlue),因为它最初是由…

安装samba服务

说明: 1、根据业务场景需要,要求将linux生成的图片文件,共享到windows服务器。 2、研发从共享文件夹中读取图片并且在应用web页面展示。 3、故要求安装搭建samba服务器,然后将共享文件夹挂载到windows服务器指定路径。 一、安装samba服务 1、安装samba服务 说明:请在linu…

java web中解决浏览器下载后文件中文乱码问题

解决Java Web应用中浏览器下载文件时中文乱码的问题,通常需要在HTTP响应头中正确设置Content-Disposition字段,以指示浏览器如何处理文件名中的非ASCII字符。 以下是一个通用的方法,适用于包括IE、Chrome、Firefox、Safari在内的多种浏览器&…

【PTA】7-1 网红点打卡攻略(C/C++)代码实现 反思

解题细节分析: 0.比较图的两种存储方法,通过邻接矩阵存储更便于查找给定两点之间的关系 1.注意理解清楚题义:“访问所有网红点”中所有不是指攻略中所有,而是存在的全部的网红点 代码见下:// 需要注明的是&#xff…

锦江丽笙酒店稳步拓局海内外酒店市场 签约及意向合作20个新项目

(中国上海,2024年6月27日)民族品牌的国际化发展已日趋成为推动经济和文化交流的重要力量。作为民族品牌与国际品牌的融合发展,锦江丽笙酒店顺应市场趋势有序推进旗下品牌矩阵的全面布局;2024年上半年,已达成…

简易深度学习(1)深入分析神经元及多层感知机

一、神经元 单个神经元结构其实可以认为是一个线性回归模型。例如下图中 该神经元输入为三个特征(x1,x2,x3),为了方便理解,大家可以认为每条线上都有一个权重和特征对应(w1,w2&…

11-NumPy遍历数组

NumPy遍历数组 NumPy 提供了一个 nditer 迭代器对象,它可以配合 for 循环完成对数组元素的遍历。 下面看一组示例,使用 arange() 函数创建一个 3*4 数组,并使用 nditer 生成迭代器对象。 示例1: import numpy as np a np.ara…

Java列表转树形结构的工具

不废话,直接上代码 一、工具函数 可以直接使用list2tree()实现列表转树形结构 package com.server.utils.tree;import org.springframework.beans.BeanUtils;import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Bi…

从源码到上线:直播带货系统与短视频商城APP开发全流程

很多人问小编,一个完整的直播带货系统和短视频商城APP是如何从源码开发到最终上线的呢?今天,笔者将详细介绍这一全过程。 一、需求分析与规划 1.市场调研与需求分析:首先需要进行市场调研,了解当前市场的需求和竞争情…

入职必备-Git 2种方式拉取代码

【SSH方式】: 1.复制电子邮箱 2.git bash 打开窗口 ssh-keygen -t rsa -C liuchangprimecare.group 3.一路回车,然后查看C:\Users\LiuChang.ssh里面的文件 打开id_rsa.pub文件,复制代码 4.添加到GitLab的公钥输入框 5.然后 git clone gitgitlab.pr…

使用容器配置文件构建任意应用镜像_并将应用镜像推送到公共仓库共享_应用分享与启动---分布式云原生部署架构搭建012

上面我们编写好了应用,并且,安装好了redis 现在我们把应用打包成镜像. 以前是这样做的,不方便,因为需要在服务器上,安装jdk什么的,现在有了 镜像就不用,给服务器安装镜像什么的了 以后所有机器都安装docker以后,就直接运行就可以了 首先看一下,安装java应用,需要 用到openjd…

指纹浏览器是什么?跨境多账号安全如何保证?

随着电子商务的蓬勃发展,越来越多的商家选择开设多店来扩大经营规模。然而多店运营也带来了一系列的挑战,其中之一就是账号安全。 1. 了解反检测浏览器和代理服务器 在我们开始讨论如何有效地使用反检测浏览器之前,我们首先需要了解这两个工…

openlayer 我的标注功能

背景: 通过openlayer库,可以在地图上实现绘制点、线、面。 并把绘制的结果添加到我的标注的弹框。 我的标注功能,包括:我的标注查询结果的数据展示;添加分组;添加我的标注;编辑分组、删除分组&a…

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月,ChatGPT 成功面世,成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同,OpenAI 从初代模型 GPT-1 开始,始终贯彻只有解码器&#xff0…

【机器学习300问】134、什么是主成分分析(PCA)?

假设你的房间堆满了各种各样的物品,书籍、衣服、玩具等等,它们杂乱无章地散落各处。现在,你想要清理房间,但又不想扔掉任何东西,只是希望让房间看起来更整洁,更容易管理。 你开始思考,能否将物品…

深入解读 ThreadLocal 源码及其在 ThreadLocalContext 中的使用

深入解读 ThreadLocal 源码及其在 ThreadLocalContext 中的使用 ThreadLocal 是 Java 中用于提供线程局部变量的一种机制,通过为每个线程提供独立的变量副本,保证了线程之间的数据隔离性。本文将深入解读 ThreadLocal 的源码,并展示其在 Thr…

以数治税时代来临,企业如何应对?

全电发票是数字经济时代发票的新形态,顺应了数字经济潮流。现如今,国家正全力推动行业数字化进程,预计,2025年将基本实现发票全领域、全环节、全要素电子化,实现税务执法、服务、监管与大数据智能化应用深度融合、高效…

Spring事务的源码底层实现

文章目录 事务理论执行过程EnableTransactionManagement底层实现 事务 在线流程图 理论执行过程 通过事务管理器创建一个连接对象connection1设置事务隔离级别、是否只读等conn1.autocommit(false)将conn1存入ThreadLocal中Map<DataSource,Connection>执行目标方法、多…

Session会话与请求域的区别

session会话和请求域&#xff08;也称为request域&#xff09;都是用于存储和管理用户特定信息的重要概念&#xff0c;但它们在作用范围和生命周期上有显著的不同。 请求域 (Request Domain) 作用范围&#xff1a;请求域是面向单次请求的。每次HTTP请求都会创建一个新的request…