免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5511 | 回复: 13
打印 上一主题 下一主题

[其他] recv 读取http头部的问题 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-30 20:20 |只看该作者 |倒序浏览
本帖最后由 goingstudy 于 2012-10-30 20:41 编辑

现在我是发一个http请求,然后通过识别\r\n\r\n读取http的头部,读取头部时是通过read(sockfd,buf,1)来读取,但是通过调试发现读不进去,这是怎么回事,有遇到过这种问题的吗?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-10-30 20:22 |只看该作者
read(sockfd,buf,1), 这是读1字节?????????

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
3 [报告]
发表于 2012-10-30 20:32 |只看该作者
本帖最后由 goingstudy 于 2012-10-30 20:34 编辑

回复 2# linux_c_py_php


    对啊,因为我想获得http响应报文的长度,但是又不想先发head请求,我是发一次请求,然后一个字节一个字节的读取头部后,在正常的读取body

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
4 [报告]
发表于 2012-10-30 20:34 |只看该作者
上面打错了,应该是read(sockfd,&buf,1);

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
5 [报告]
发表于 2012-10-30 21:39 |只看该作者
结贴,知道怎么回事了,发请求时弄错了

论坛徽章:
0
6 [报告]
发表于 2012-10-30 22:06 |只看该作者
一直没太搞清楚假如read到一个buffer后,求教怎么得到完整的一个http请求~要做个状态机么?

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
7 [报告]
发表于 2012-10-31 08:29 |只看该作者
回复 3# goingstudy


    为什么要这么做,http协议中有地方专门标注了长度单元,而且你请求的时候可以不请求实体数据..

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
8 [报告]
发表于 2012-10-31 10:11 |只看该作者
本帖最后由 goingstudy 于 2012-10-31 10:12 编辑

回复 6# justmao945
因为http的头部的长度不确定,所以一个字符一个字符的读取到一个缓冲区里,直到\r\n\r\n,从接受到头部的缓冲区里取出http的长度,再读取http的body,这样不行吗?我是初学的
另:如果先发HEAD请求得到http的头部,在发GET请求,要发两次请求,感觉不如上面快

   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
9 [报告]
发表于 2012-10-31 10:14 |只看该作者
回复 7# hanzhenlll


    我是想只读取http响应的body,但是又不想发两次请求,所以这样做了,感觉挺蹩脚的,还有什么好的的方法吗,求指教

论坛徽章:
0
10 [报告]
发表于 2012-10-31 11:18 |只看该作者
应该一次性读尽可能多的数据到一个大些的缓冲区(如4KB),然后遍历缓冲区中的字节,发现\r\n则可以提取1行数据。
回复 1# goingstudy


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP