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,数据
0
投稿

猜你喜欢

  • 数学公式“四又二分之一”

    2009-01-14 20:03:00
  • ASP调试方法图文教程

    2008-01-26 19:32:00
  • 在Win2003 64位下ASP无法连接Access数据库

    2011-03-30 11:22:00
  • javascript new fun的执行过程

    2010-08-05 21:23:00
  • 大牌 Banner 设计欣赏(468x60)

    2008-01-20 13:02:00
  • asp小偷程序原理和简单示例

    2007-11-05 17:12:00
  • 如何使用sql语句来修改数据记录

    2007-06-21 11:48:00
  • Golang设计模式中抽象工厂模式详细讲解

    2023-08-04 20:46:46
  • sqlserver 触发器实例代码

    2012-01-29 18:30:45
  • 去掉CSS赘余代码,CSS可以更简洁

    2008-11-05 13:07:00
  • 利用golang的字符串解决leetcode翻转字符串里的单词

    2023-07-17 16:36:21
  • 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
  • 微信跳一跳辅助python代码实现

    2023-03-26 15:25:50
  • python实现打印类的所有属性和方法

    2021-07-28 14:51:56
  • 15个网页排版例子赏析

    2008-01-06 16:38:00
  • asp之家 网络编程 m.aspxhome.com