使用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中的对象拷贝示例 python引用传递
Jan 23 Python
python根据京东商品url获取产品价格
Aug 09 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
python框架中flask知识点总结
Aug 17 Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 Python
Python中extend和append的区别讲解
Jan 24 Python
Python 3.8 新功能全解
Jul 25 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
如何利用python实现Simhash算法
Jun 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
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
详解Python中的条件判断语句
2015/05/14 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
Python坐标线性插值应用实现
2019/11/13 Python
python实现智能语音天气预报
2019/12/02 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python计算导数并绘图的实例
2020/02/29 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
机关门卫制度
2014/02/01 职场文书
村主任当选感言
2015/08/01 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
详解在OpenCV中如何使用图像像素
2022/03/03 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android