使用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实现的多线程端口扫描功能示例
Jan 21 Python
python ansible服务及剧本编写
Dec 29 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
Python实现的建造者模式示例
Aug 06 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
keras自定义回调函数查看训练的loss和accuracy方式
May 23 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
用Python爬虫破解滑动验证码的案例解析
May 06 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校验ISBN码的函数代码
2011/01/17 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
Python处理session的方法整理
2019/08/29 Python
numpy.array 操作使用简单总结
2019/11/08 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
iPython pylab模式启动方式
2020/04/24 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
物业门卫岗位职责
2013/12/28 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
趣味运动会策划方案
2014/06/02 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
Oracle笔记
2021/04/05 Oracle
解决python存数据库速度太慢的问题
2021/04/23 Python