Http1.1中 使用 chunked 编码传送时 没有CONTENT_LENGTH,下载之前无法确定要下载的大小. Wininet中已经内嵌该传输协议,要查看chunked块的大小只能socket底层编写获取报文. Wininet能不能直接访问原报文需走旁路.

// socket_http.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include
#include #pragma warning(disable:4996)
#pragma warning(disable:4267)
#pragma comment(lib, "WS2_32.lib")void logFile(char *p,int len);
char fname[100];int main()
{WORD wVersionRequested;WSADATA wsaData;int bytesRecv;//Initialize WinsockwVersionRequested = MAKEWORD(2,2);bytesRecv = WSAStartup(wVersionRequested,&wsaData);if(bytesRecv != 0){printf("WSAStartup failed: %d\n", bytesRecv);return 1;}if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2){WSACleanup();return 1;}strcpy(fname,"index.html");_unlink(fname);char host[] = {"www.baidu.com"};hostent * ht = gethostbyname(host);struct in_addr ip_addr;memcpy(&ip_addr,ht->h_addr_list[0],4);SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr = ip_addr;addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(80);char ip[20];sprintf(ip,"%d.%d.%d.%d",addrSrv.sin_addr.S_un.S_un_b.s_b1,addrSrv.sin_addr.S_un.S_un_b.s_b2,addrSrv.sin_addr.S_un.S_un_b.s_b3,addrSrv.sin_addr.S_un.S_un_b.s_b4);printf("host:%s ip:%s\r\n",host,ip);bytesRecv = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));if( bytesRecv == SOCKET_ERROR){WSACleanup();return 1;}char recvBuf[1024];char* protocolHead= "GET / HTTP/1.1\n""Host:www.baidu.com\n""Accept:*/*\n""User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\n""Connection:close\n\n";bytesRecv = send(sockClient,protocolHead,strlen(protocolHead)+1,0);printf("request headers:\r\n%s\r\n",protocolHead);int ic=0;while( bytesRecv != SOCKET_ERROR ){memset(recvBuf,0,1024);bytesRecv = recv(sockClient,recvBuf,1024,0);if(ic==0)printf("response headers[%ld]:\r\n%s\r\n",bytesRecv,recvBuf);if(ic==1)printf("body [%ld]:\r\n%s",bytesRecv,recvBuf);ic++;if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {printf( "Connection Closed.\n");break;}logFile(recvBuf,bytesRecv);}closesocket(sockClient);WSACleanup();return 0;
}void logFile(char *p,int len)
{FILE *fp = fopen(fname,"a+");if(!fp) return;fwrite(p,1,len,fp);fclose(fp);
}----------------------------------------------------------------------
运行结果
host:www.baidu.com ip:119.75.218.77request headers:
GET / HTTP/1.1
Host:www.baidu.com
Accept:*/*
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Connection:closeresponse headers[633]:
HTTP/1.1 200 OK
Date: Sun, 13 Apr 2014 18:24:51 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=10AA88D7B6D34E65F9FF8A384BE63FE9:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: H_PS_PSSID=5778_5991_1421_5225_5848_4760_6017_5856_5918; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Expires: Sun, 13 Apr 2014 18:24:20 GMT
X-Powered-By: HPHP
Server: BWS/1.1
BDPAGETYPE: 1
BDQID: 0x875baba2004f0570
BDUSERID: 0body [1024]:
d27b  

转载于:https://www.cnblogs.com/nlsoft/p/3663109.html

Transfer-Encoding: chunked相关推荐

  1. php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip

    我最近开始在我的网站上使用gzip,它在除Opera之外的所有浏览器上都起到了一种魅力作用,它给出了一个错误,即由于数据损坏而无法解压缩内容.从我可以从测试和谷歌搜索中收集到的,使用gzip和chun ...

  2. python爬虫入门教程--快速理解HTTP协议(一)

    http协议是互联网里面最重要,最基础的协议之一,我们的爬虫需要经常和http协议打交道.下面这篇文章主要给大家介绍了关于python爬虫入门之快速理解HTTP协议的相关资料,文中介绍的非常详细,需要 ...

  3. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...

  4. http请求丢部分数据_温故知新,HTTP/2

    去年年底,据国际互联网工程任务组( IETF )消息,HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,即有望成为 HTTP 协议的第三个正式版本,也就是说HTTP/3可能要来了. ...

  5. 温故知新,HTTP/2

    版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载. https://blog.csdn.net/wireless_com/article/details ...

  6. app中的长连接与实现方式

    http://mrpeak.cn/blog/http2/   --- 原文 http2.0的好处不仅仅是multiplexing,请求压缩,优先级控制,server push等等都是亮点.  解决连接 ...

  7. 惊呆了!腾讯架构师撰写亿级网关、分布式微服务等“超进化”笔记 附源码

    如何将一个承载亿级调用量的网关系统设计得高效且稳定?如何将一个平台合理化地开放达到多边共赢?如何熟练地驾驭分布式系统设计?如何更深入地了解MQ的使用场景?如何搭建一个成熟的消息推送系统?以及RPC.I ...

  8. HTTP 2.0的那些事

    在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议.最近http2.0的诞生使得它再次互联网技术圈关注的焦点.任何事物的消退和新生都有其背后推动的力量.对于HTTP来说,这力量复杂来说 ...

  9. Http2.0那点事

    此文转自:http://www.open-open.com/lib/view/open1455796649605.html 在我们所处的互联网世界中,HTTP协议算得上是使用最广泛的网络协议.最近ht ...

  10. libcurl API 常用函数

    libcurl 详参libcurl 1 curl_easy_getinfo CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); 使 ...

最新文章

  1. 500多页的机器学习入门笔记,下载超5万次,背后都有什么故事?
  2. python编写的程序大全_Python开发技术大全
  3. linux虚拟内存当硬盘,linux里面虚拟内存和swap有什么不同?
  4. linux下安装nginx,php,mysql
  5. [html] 浏览器内多个标签页之间的通信方式有哪些?
  6. odex vdex art区别
  7. java hashtable 修改_Java Hashtable computeIfAbsent()用法及代码示例
  8. 海马玩android模拟器哪个好用,主流安卓模拟器评测:叶子猪海马玩表现突出
  9. 奥本海姆《数字信号处理》课后题解析(一)
  10. 红米手机计算机软件,详解红米手机连接电脑方法
  11. 您觉得目前网页最小字体应该多大呢?
  12. 文件夹自动生成目录树(批处理)
  13. 爬虫之requests模块
  14. 服务器ie浏览器总是未响应怎么办,IE8浏览器总是无响应或卡死崩溃怎么办
  15. 吃糖果 (HDU-1205)(鸽笼原理(抽屉原理))
  16. 【autojs】Auto.js Pro免root打开无障碍服务(需adb授权,重启手机不失效)脚本源代码
  17. opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
  18. 【Mathematica】三种画爱心的方法
  19. 今日收获 可以点击的标签 鼠标悬浮 小手图标
  20. Office问题:PowerPoint发现.pptx 中的内容有问题。PowerPoint可尝试修复此演示文稿。

热门文章

  1. 【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
  2. ubuntu 12.04 以固定 IP 地址连接网络并配置DNS
  3. ASP/COM+组件开发辅助软件之补充
  4. 正则表达式及其在Java和Python中的相关操作
  5. stl变易算法(三)
  6. linux文件内核目录,Linux内核目录文件简介
  7. flink读取不到文件_Flink流处理API——Source
  8. OSG仿真案例(3)——cmake创建工程
  9. java 对象equals_浅谈Java对象的equals方法
  10. 计算机硬盘哪里找到相关信息,获取计算机的信息(IP地址、MAC地址、CUP序列号、硬盘序列号、主板信息等等)...