• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python中使用socket发送HTTP请求数据接收不完整问题解决方法

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

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python socket,python socket编程,python socket模块,python3 socketserver,python socketserver等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

由于工作的需求,需要用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)

</div>

代码运行正常,但是发现一个比较重要的问题,运行结果只返回了HTTP的头部信息,网页的内容则没有被返回。网上查找了很多资料,一无所获,经过一夜的思考,突然想到了一个问题,有可能我请求的资源非常大,一个网络的IP包的大小,它是受很多因素制约的,最典型的便是MTU(最大传输单元),那么会不会我请求的数据被分割了,HTTP的头部信息只是一部分,其它数据还在传输或者缓冲区呢?于是做了这样一个遍历:

while True:
  buf = se.recv(1024)
  if not len(buf):
    break
  print buf

</div>

这样发现所有请求的数据均被返回了,看来要想做好网络编程,深入理解TCP/IP协议是非常必要的。

</div>

您可能想查找下面的文章:

  • python生成式的send()方法(详解)
  • Python HTTP客户端自定义Cookie实现实例
  • Python Socket编程详细介绍
  • python网络编程调用recv函数完整接收数据的三种方法
  • Python Socket编程详细介绍
  • Python与Java间Socket通信实例代码
  • Python基础教程之tcp socket编程详解及简单实例
  • Python socket网络编程TCP/IP服务器与客户端通信
  • Python socket网络编程TCP/IP服务器与客户端通信
  • 利用Python中SocketServer 实现客户端与服务器间非阻塞通信

相关文章

  • Python正则表达式教程之二:捕获篇
  • Python的math模块中的常用数学函数整理
  • 使用python提取html文件中的特定数据的实现代码
  • python设置windows桌面壁纸的实现代码
  • python插入数据到列表的方法
  • Python多线程同步Lock、RLock、Semaphore、Event实例
  • Python的面向对象编程方式学习笔记
  • python中随机函数random用法实例
  • Python实现各种排序算法的代码示例总结
  • 在windows下快速搭建web.py开发框架方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python进阶教程之函数对象(函数也是对象)
    • Python笔记(叁)继续学习
    • Python实现Windows和Linux之间互相传输文件(文件夹)的方法
    • python动态监控日志内容的示例
    • 深入讲解Python中面向对象编程的相关知识
    • Python交换变量
    • python中的hashlib和base64加密模块使用实例
    • Python中使用PIL库实现图片高斯模糊实例
    • Python基于pillow判断图片完整性的方法
    • 写了个监控nginx进程的Python脚本

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有