使用httplib模块来制作Python下HTTP客户端的方法


Posted in Python onJune 19, 2015

httplib 是 python中http 协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互。httplib的内容不是很多,也比较简单。以下是一个非常简单的例子,使用httplib获取google首页的html:
 

#coding=gbk 
import httplib 
conn = httplib.HTTPConnection("www.google.cn") 
conn.request('get', '/') 
print conn.getresponse().read() 
conn.close()

下面详细介绍httplib提供的常用类型和方法。
httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )

HTTPConnection类的构造函数,表示一次与服务器之间的交互,即请求/响应。参数host表示服务器主机,如:www.csdn.net;port为端口号,默认值为80; 参数strict的 默认值为false, 表示在无法解析服务器返回的状态行时( status line) (比较典型的状态行如: HTTP/1.0 200 OK ),是否抛BadStatusLine 异常;可选参数timeout 表示超时时间。
HTTPConnection提供的方法:
HTTPConnection.request ( method , url [ , body [ , headers ]] )

调用request 方法会向服务器发送一次请求,method 表示请求的方法,常用有方法有get 和post ;url 表示请求的资源的url ;body 表示提交到服务器的数据,必须是字符串(如果method 是”post” ,则可以把body 理解为html 表单中的数据);headers 表示请求的http 头。
HTTPConnection.getresponse ()

获取Http 响应。返回的对象是HTTPResponse 的实例,关于HTTPResponse 在下面 会讲解。
HTTPConnection.connect ()

连接到Http 服务器。
HTTPConnection.close ()

关闭与服务器的连接。
HTTPConnection.set_debuglevel ( level )

设置高度的级别。参数level 的默认值为0 ,表示不输出任何调试信息。
httplib.HTTPResponse

HTTPResponse表示服务器对客户端请求的响应。往往通过调用HTTPConnection.getresponse()来创建,它有如下方法和属性:
HTTPResponse.read([amt])

获取响应的消息体。如果请求的是一个普通的网页,那么该方法返回的是页面的html。可选参数amt表示从响应流中读取指定字节的数据。
HTTPResponse.getheader(name[, default])

获取响应头。Name表示头域(header field)名,可选参数default在头域名不存在的情况下作为默认值返回。
HTTPResponse.getheaders()

以列表的形式返回所有的头信息。
HTTPResponse.msg

获取所有的响应头信息。
HTTPResponse.version

获取服务器所使用的http协议版本。11表示http/1.1;10表示http/1.0。
HTTPResponse.status

获取响应的状态码。如:200表示请求成功。
HTTPResponse.reason

返回服务器处理请求的结果说明。一般为”OK”

下面通过一个例子来熟悉HTTPResponse中的方法:
 

#coding=gbk 
import httplib 
conn = httplib.HTTPConnection("www.g.cn", 80, False) 
conn.request('get', '/', headers = {"Host": "www.google.cn", 
                  "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5", 
                  "Accept": "text/plain"}) 
res = conn.getresponse() 
print 'version:', res.version 
print 'reason:', res.reason 
print 'status:', res.status 
print 'msg:', res.msg 
print 'headers:', res.getheaders() 
#html 
#print '/n' + '-' * 50 + '/n' 
#print res.read() 
conn.close()

这是我用firebug跟踪到响应头:

使用httplib模块来制作Python下HTTP客户端的方法

Httplib模块中还定义了许多常量,如:

Httplib. HTTP_PORT 的值为80,表示默认的端口号为80;

Httplib.OK 的值为200,表示请求成功返回;

Httplib. NOT_FOUND 的值为404,表示请求的资源不存在;

可以通过httplib.responses 查询相关变量的含义,如:

Print httplib.responses[httplib.NOT_FOUND]    #not found

Python 相关文章推荐
Python爬取三国演义的实现方法
Sep 12 Python
python中关于for循环的碎碎念
Jun 30 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python3模块smtplib实现发送邮件功能
May 22 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
python爬虫基础之urllib的使用
Dec 31 Python
Django框架中表单的用法
Jun 10 Python
举例详解Python中threading模块的几个常用方法
Jun 18 #Python
Python的time模块中的常用方法整理
Jun 18 #Python
Python抽象类的新写法
Jun 18 #Python
Python实现的彩票机选器实例
Jun 17 #Python
Python基于Tkinter实现的记事本实例
Jun 17 #Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 #Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 #Python
You might like
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
python远程邮件控制电脑升级版
2019/05/23 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
个人承诺书
2014/03/26 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
倡议书格式及范文
2015/04/29 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
三八妇女节致辞
2015/07/31 职场文书
优秀创业计划书分享
2019/07/19 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js