Python中使用socket发送HTTP请求数据接收不完整问题解决方法
作者:junjie 时间:2021-06-29 11:43:50
由于工作的需求,需要用python做一个类似网络爬虫的采集器。虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需求,如手动设定User-Agent,Referer等,所以选择了直接用socket进行设计。当然,这样的话,需要对HTTP协议比较熟悉,HTTP协议这里就不做讲解了。整个python的代码如下:
#!/usr/bin env python
import socket
host="www.baidu.com"
se=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
se.connect((host,80))
se.send("GET / HTTP/1.1\n")
se.send("Accept:text/html,application/xhtml+xml,*/*;q=0.8\n")
#se.send("Accept-Encoding:gzip,deflate,sdch\n")
se.send("Accept-Language:zh-CN,zh;q=0.8,en;q=0.6\n")
se.send("Cache-Control:max-age=0\n")
se.send("Connection:keep-alive\n")
se.send("Host:"+host+"\r\n")
se.send("Referer:http://www.baidu.com/\n")
se.send("user-agent: Googlebot\n\n")
print se.recv(1024)
代码运行正常,但是发现一个比较重要的问题,运行结果只返回了HTTP的头部信息,网页的内容则没有被返回。网上查找了很多资料,一无所获,经过一夜的思考,突然想到了一个问题,有可能我请求的资源非常大,一个网络的IP包的大小,它是受很多因素制约的,最典型的便是MTU(最大传输单元),那么会不会我请求的数据被分割了,HTTP的头部信息只是一部分,其它数据还在传输或者缓冲区呢?于是做了这样一个遍历:
while True:
buf = se.recv(1024)
if not len(buf):
break
print buf
这样发现所有请求的数据均被返回了,看来要想做好网络编程,深入理解TCP/IP协议是非常必要的。
标签:Python,socket,HTTP,数据
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
数学公式“四又二分之一”
2009-01-14 20:03:00
ASP调试方法图文教程
2008-01-26 19:32:00
![](https://img.aspxhome.com/file/UploadPic/20081/26/2008126195146249s.jpg)
在Win2003 64位下ASP无法连接Access数据库
2011-03-30 11:22:00
javascript new fun的执行过程
2010-08-05 21:23:00
![](https://img.aspxhome.com/file/UploadPic/20108/5/20100805150736846-93s.jpg)
大牌 Banner 设计欣赏(468x60)
2008-01-20 13:02:00
![](https://img.aspxhome.com/file/UploadPic/20081/20/2008120134648803s.gif)
asp小偷程序原理和简单示例
2007-11-05 17:12:00
如何使用sql语句来修改数据记录
2007-06-21 11:48:00
Golang设计模式中抽象工厂模式详细讲解
2023-08-04 20:46:46
![](https://img.aspxhome.com/file/2023/4/93664_0s.png)
sqlserver 触发器实例代码
2012-01-29 18:30:45
去掉CSS赘余代码,CSS可以更简洁
2008-11-05 13:07:00
利用golang的字符串解决leetcode翻转字符串里的单词
2023-07-17 16:36:21
![](https://img.aspxhome.com/file/2023/8/99048_0s.jpg)
PHP5 mysqli的prepare准备语句使用说明
2023-11-22 12:50:29
sql server对字段的添加修改删除、以及字段的说明
2012-01-05 18:50:52
oracle 服务启动,关闭脚本(windows系统下)
2009-07-26 08:57:00
SQL查询入门(中篇)
2011-09-30 11:15:09
Ajax发明人:Ajax并不适合所有网站
2008-01-30 12:20:00
详解go-admin在线开发平台学习(安装、配置、启动)
2023-08-26 15:27:31
![](https://img.aspxhome.com/file/2023/9/101049_0s.png)
微信跳一跳辅助python代码实现
2023-03-26 15:25:50
python实现打印类的所有属性和方法
2021-07-28 14:51:56
![](https://img.aspxhome.com/file/2023/2/67902_0s.png)
15个网页排版例子赏析
2008-01-06 16:38:00
![](https://img.aspxhome.com/file/UploadPic/20081/6/20081616479963s.gif)