使用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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python判断Abundant Number的方法
Jun 15 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
CentOS6.5设置Django开发环境
Oct 13 Python
Python迭代和迭代器详解
Nov 10 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
python读取ini配置文件过程示范
Dec 23 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
教你使用pyinstaller打包Python教程
May 27 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/08/21 PHP
php把session写入数据库示例
2014/02/26 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
浅析JS运动
2015/12/28 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
详解使用Python处理文件目录的相关方法
2015/10/16 Python
值得收藏的10道python 面试题
2019/04/15 Python
python如何绘制疫情图
2020/09/16 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
餐厅销售主管职责范本
2014/02/19 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
python flask框架快速入门
2021/05/14 Python
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android