使用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计算方程式根的方法
May 07 Python
python中import学习备忘笔记
Jan 24 Python
Python爬取网易云音乐热门评论
Mar 31 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
python3的输入方式及多组输入方法
Oct 17 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
详解Python中的测试工具
Jun 09 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
Python使用Pandas库常见操作详解
Jan 16 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python爬虫调度器用法及实例代码
Nov 30 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
Python获取某一天是星期几的方法示例
2017/01/17 Python
python 数据的清理行为实例详解
2017/07/12 Python
python文本数据相似度的度量
2018/03/12 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Django中使用Celery的方法示例
2018/11/29 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
东方电视购物:东方CJ
2016/10/12 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
网站美工岗位职责
2014/04/02 职场文书
幼儿园老师寄语
2014/04/03 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript