Python中使用socket发送HTTP请求数据接收不完整问题解决方法

 更新时间:2015年02月04日 09:38:26   投稿:junjie  
这篇文章主要介绍了Python中使用socket发送HTTP请求数据接收不完整问题解决方法,本文使用一个循环解决了数据不完整问题,需要的朋友可以参考下

由于工作的需求,需要用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协议是非常必要的。

相关文章

  • python3实现随机数

    python3实现随机数

    这篇文章主要为大家详细介绍了python3实现随机数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python进行数据预处理的4个重要步骤

    python进行数据预处理的4个重要步骤

    在数据科学项目中,数据预处理是最重要的事情之一,本文详细给大家介绍python进行数据预处理的4个重要步骤:拆分训练集和测试集,处理缺失值,处理分类特征和进行标准化处理,需要的朋友可以参考下
    2023-06-06
  • python tkinter之 复选、文本、下拉的实现

    python tkinter之 复选、文本、下拉的实现

    这篇文章主要介绍了python tkinter之 复选、文本、下拉的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 利用Python制作一个动物识别小程序

    利用Python制作一个动物识别小程序

    动物识别是计算机视觉和模式识别领域的重要研究方向,它涉及通过图像或视频数据自动识别和分类不同种类的动物,随着数字图像技术和机器学习方法的快速发展,动物识别在实际应用中具有广泛的潜力,本文将给大家介绍如何基于Python制作一个动物识别小程序
    2023-10-10
  • Python的图像处理库Pillow安装与使用教程

    Python的图像处理库Pillow安装与使用教程

    Pillow库是Python中用于图像处理的开源库,提供了丰富的图像处理功能,如图像读取、保存、裁剪、调整大小、旋转、添加文字等,这篇文章主要给大家介绍了关于Python的图像处理库Pillow安装与使用的相关资料,需要的朋友可以参考下
    2024-04-04
  • Python目录下文件读取方式

    Python目录下文件读取方式

    这篇文章主要介绍了Python目录下文件读取方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python爬虫中urllib库的进阶学习

    Python爬虫中urllib库的进阶学习

    本篇文章主要介绍了Python爬虫中urllib库的进阶学习内容,对此有兴趣的朋友赶紧学习分享下。
    2018-01-01
  • spyder 在控制台(console)执行python文件,debug python程序方式

    spyder 在控制台(console)执行python文件,debug python程序方式

    这篇文章主要介绍了spyder 在控制台(console)执行python文件,debug python程序方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python使用cx_Freeze库生成msi格式安装文件的方法

    Python使用cx_Freeze库生成msi格式安装文件的方法

    这篇文章主要介绍了Python使用cx_Freeze库生成msi格式安装文件的方法,结合实例形式分析了Python基于cx_Freeze库生成msi格式安装文件操作技巧与相关问题解决方法,需要的朋友可以参考下
    2018-07-07
  • python中字典和列表的相互嵌套问题详解

    python中字典和列表的相互嵌套问题详解

    这篇文章主要为大家详细介绍了python中字典和列表相互嵌套的问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论