使用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的框架下的web app的详细教程
Apr 30 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
Python元字符的用法实例解析
Jan 17 Python
pip命令无法使用的解决方法
Jun 12 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
python实现多张图片拼接成大图
Jan 15 Python
python用for循环求和的方法总结
Jul 08 Python
python django中8000端口被占用的解决
Dec 17 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
python 实现批量图片识别并翻译
Nov 02 Python
用python计算文件的MD5值
Dec 23 Python
Python Selenium操作Cookie的实例方法
Feb 28 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
天津市收音机工业发展史
2021/03/04 无线电
php xml文件操作实现代码(二)
2009/03/20 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP的反射机制实例详解
2017/03/29 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
利用Python如何生成随机密码
2016/04/20 Python
Python实现的选择排序算法示例
2017/11/29 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
监理资料员岗位职责
2014/01/03 职场文书
教师现实表现材料
2014/02/14 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
见习报告格式范文
2014/11/08 职场文书
大国崛起日本观后感
2015/06/02 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Linux系统下安装PHP7.3版本
2021/06/26 PHP
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers