HttpSendRequest向服务端发送数据,构造请求http头
- //向http://192.168.8.72:8080/oss/client/analysis.g发送数据.
- LPCTSTR lpURL = _T("http://192.168.8.72:8080");
- if (!::InternetCheckConnection(lpURL, FLAG_ICC_FORCE_CONNECTION, 0))
- return;
- HINTERNET hOpen = ::InternetOpen(_T("client.exe"), INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
- if (NULL == hOpen)
- return;
- LPCTSTR lpDomainName = _T("192.168.8.72"); // 注意不能带 http://
- // 该函数第3个参数不能是80,而应该是8080
- HINTERNET hConnect = ::InternetConnect(hOpen, lpDomainName, 8080, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
- if (NULL == hConnect)
- goto FUN_END2;
- // 注意第3个参数的个数,最前面要有"/",它同lpURL拼接成http://192.168.8.72:8080/oss/client/analysis.g
- LPCTSTR szAccept[] = {_T("*/*"), NULL};
- DWORD dwFlag = INTERNET_FLAG_NO_CACHE_WRITE;
- HINTERNET hOpenRequest = ::HttpOpenRequest(hConnect, _T("POST"), _T("/oss/client/analysis.g"),
- _T("HTTP/1.1"), lpURL, szAccept, dwFlag, 0);
- if (NULL == hOpenRequest)
- goto FUN_END1;
- BOOL bRet;
- TCHAR szPostData[] = _T("<Root>this is test data from client</Root>");
- char utf8PostData[BUF_LEN] = {0};
- strcpy(utf8PostData, dataConvert.TCharToUTF8(szPostData));
- // 外发的header.
- // 注意,这里的头部很容易错.
- // 每个字符串结尾不能带诸如 "/r/n","\r\n"这样的结尾,最后一个字符串必须要带两个"\r\n",也就是"\r\n\r\n".
- // 有些网友写的示例中,每个字符串后都带有诸如 "/r/n"或"\r\n"这样的结尾,但在我的测试中发现是错误的,
- // HttpQueryInfo返回的状态码总是400,意思是"错误请求 — 请求中有语法问题,或不能满足请求",估计这跟
- // 具体的web服务有关.但有个简单的方式处理该问题,可使用chrome浏览器访问某个url(这里是http://192.168.8.72:8080/oss/client/// analysis.g),然后使用抓包工具Wireshark抓取http包,分析request和response头.然后再使用你的程序请求你的url,一样抓包,然后对// 比这两次抓取的数据包中http头有什么区别,修改你的代码,不断尝试,直到成功.
- TCHAR headerLanguage[] = _T("Accept-Language: zh-CN,zh;q=0.8");
- TCHAR headerEncoding[] = _T("Accept-Encoding: gzip,deflate,sdch";);
- TCHAR headerCharset[] = _T("Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3");
- TCHAR headerContentType[] = _T("Content-Type: text/xml";);
- TCHAR headerHost[] = _T("Host: 192.168.8.72:8080";);
- TCHAR headerOrigin[] = _T("Origin: http://192.168.8.72:8080";);
- TCHAR headerReferer[] = _T("Referer: http://192.168.8.72:8080/oss/client/create.g");
- TCHAR headerContentLength[64];
- _stprintf(headerContentLength, _T("Content-Length: %d\r\n\r\n"), strlen(utf8PostData)); //注意结尾有两个\r\n
- // 添加header 信息
- bRet = HttpAddRequestHeaders(hOpenRequest, headerLanguage, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerEncoding, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerCharset, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerContentType, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerHost, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerOrigin, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerReferer, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = HttpAddRequestHeaders(hOpenRequest, headerContentLength, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
- bRet = ::HttpSendRequest(hOpenRequest, NULL, 0, utf8PostData, strlen(utf8PostData));
- DWORD dwErr = ::GetLastError();
- if (!bRet) goto FUN_END1;
- TCHAR szBuff[BUF_LEN] = {0};
- DWORD dwBuffSize = BUF_LEN*sizeof(szBuff);
- bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_STATUS_CODE, (LPVOID)szBuff, &dwBuffSize, NULL);
- //Reference to http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
- int nStatusCode = _tstoi(szBuff);
- if (nStatusCode<200 || 206<nStatusCode)
- bRet = FALSE;
- if (bRet)
- {
- TCHAR szBuff[BUF_LEN_1024+1] = {0};
- DWORD dwBuffSize = BUF_LEN_1024*sizeof(szBuff);
- bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)szBuff, &dwBuffSize, NULL);
- memset(szBuff, 0, sizeof(szBuff));
- dwBuffSize = BUF_LEN_1024*sizeof(szBuff);
- bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_DATE, (LPVOID)szBuff, &dwBuffSize, NULL);
- memset(szBuff, 0, sizeof(szBuff));
- dwBuffSize = BUF_LEN_1024*sizeof(szBuff);
- bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_SERVER, (LPVOID)szBuff, &dwBuffSize, NULL);
- memset(szBuff, 0, sizeof(szBuff));
- dwBuffSize = BUF_LEN_1024*sizeof(szBuff);
- bRet = ::InternetReadFile(hOpenRequest, szBuff, dwBuffSize, &dwBuffSize);
- if (bRet)
- {
- // ...
- }
- }
- InternetCloseHandle(hOpenRequest);
- FUN_END1:
- ::InternetCloseHandle(hConnect);
- FUN_END2:
- ::InternetCloseHandle(hOpen);
转载于:https://blog.51cto.com/jetyi/1019642
HttpSendRequest向服务端发送数据,构造请求http头相关推荐
- Golang使用协程通过Socket实现客户端向服务端发送数据,服务端接收数据
一.服务端代码: package mainimport("fmt""net" )func process(conn net.Conn) {//延迟关闭目前连接d ...
- iperf 服务端发送数据_Iperf详细使用说明
Iperf 使用说明 Iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具, 能够提供网络吞吐 率信息, 以及震动. 丢包率. 最大段和最大传输单元大小等统计信息: 从而能够帮助我们测试 ...
- ajax 获取java数据_如何使用Ajax从服务端获取数据
在本文中将给出一个例子来介绍使用 Ajax 技术从服务端获得数据的三种方法.这个例子很简单,就是两个选择框(html中的标签),通过选中第一个select的某一项后,会从服务端得到一些数据,并加载到第 ...
- 网络游戏《丛林战争》开发与学习之(二):粘包分包现象以及服务端解析数据
本篇博客主要介绍数据发送和接收时遇到的粘包和分包现象,以及实现服务端解析收到消息的代码,本节的代码是在第(一)部分的基础上进行的,可以先浏览下第一部分https://blog.csdn.net/s13 ...
- ROS服务通信《客户端》 C++向服务端发送信息(乌龟案例,生成第二个乌龟)
服务调用乌龟案例 实现步骤: 1.启动乌龟显示节点. 2.通过ros命令,获取乌龟生成服务的服务名称以及服务消息类型. 3.编写服务请求节点,生成新的乌龟. 实现流程: 1.通过ros命令获取服务与服 ...
- Android 客户端与服务端的数据交互问题
Android客户端是如何与服务端的数据进行交互的呢? 一般就是客户端向服务端发送请求,服务端对数据进行相关处理,返回json数据返回给客户端,客户端再进行相关操作. 说明:主要是用登录功能来进行详解 ...
- Gzip 服务端压缩数据
2019独角兽企业重金招聘Python工程师标准>>> Gzip 服务端压缩数据,提高传输速率. 首先写一个过滤器 public class GzipValidator implem ...
- python中使用socket编程实现带有界面的客户端向服务端发送文件和下载文件
一主界面: **二:发送文件界面:**首先需要开启发送文件服务端(这里需要注意的是每一次发送文件之前都需要开启一次服务端,因为我在这里将每一次发送文件之后就关闭了客户端和服务端之间的连接) 输出相关客 ...
- 移动端向服务端提交数据——实现简单登录
移动端通过网络连接与服务端进行数据交互,在App开发中占有很大比重,可以说服务端是移动端的"后勤部队",服务端可以向移动端源源不断的更新"新鲜的血液",使得移动 ...
- java Socket Tcp示例三则(服务端处理数据、上传文件)
示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader; import java.io.IOException; im ...
最新文章
- 硬货 | 一文解读完五篇重磅ACL2017 NLP论文
- 没有c语言基础可以学python吗-学习Python之前需要先学习一下c语言吗?
- 一位大学教师对学生的建议:如何做好研究
- python上下文管理关键字_详解 Python 中的 with 与 上下文管理器
- Oracle入门(十四.6)之使用标量数据类型
- 高效应用程序的7个JVM参数
- 复化科特斯公式matlab_matlab实现复化NewtonCotes公式求积分的程序应用和代码
- php 输出数组函数调用函数,php – 无法在数组中调用函数
- 两个一样的图像相除会怎么样_【壮凌自动化分析】一种动力电池生产中基于图像运动模糊的速度检测方法...
- 输入法那个烦人的托盘图标怎么隐藏或者去掉
- Html+JavaScript猜数字游戏
- Android Accessibility大致解析,通过adb运行纯java代码打开应用的辅助功能
- Excel VLOOKUP() 函数实现自动填充内容
- 电脑显示网络2连接服务器失败,崩坏学园2连接服务器失败 连接不上网络怎么办...
- MVC中利用ViewBag传递Json数据时的前端处理方法
- 四轴无人机那些事 MiniFly源码分析 2 系统及电源分析
- Web综合应用案例-限时秒杀效果的制作
- 电脑中毒所有的exe打不开杀毒软件及win10再带病毒防护无法打开
- 【天雪楼】葫芦侠主题美化-幻塔
- web开发中,中文乱码问题汇总
热门文章
- 2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) B - Enlarging Enthusiasm dp好题
- 如何修改硬盘挂载的名字LABEL
- selenium测试(Java)-- 显式等待(九)
- php--------使用js生成二维码
- SSL 重点SSL会话步骤
- LayoutInflater(二)
- 解读absolute与relative(转载)
- debian 10 Buster正式发布了
- CSS color设置与调色板
- intellij idea 程序包不可见问题