注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

关于python httplib  

2016-10-20 15:32:25|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
我们在做爬虫时,常用的就是urllib2,但是urllib2中对301跳转处理不很灵活。虽然,urllib2能自动做301跳转,但有时,我们希望得到301重定时的头信息与 body信息,这时候就需要很底层的httplib 模块了。下面是关于使用:

1、class httplib.HTTPConnection

说明:
该类用于创建一个http类型的请求链接

原型:
HTTPConnection(host[, port[, strict[, timeout]]])
host: 请求的服务器host,不能带http://开头
port: 服务器web服务端口
strict: 是否严格检查请求的状态行,就是http1.0/1.1 协议版本的那一行,即请求的第一行,默认为False,为True时检查错误会抛异常
timeout: 单次请求的超时时间,没有时默认使用httplib模块内的全局的超时时间

  1. 实例:  
  2. conn1 = HTTPConnection('www.baidu.com:80')  
  3. conn2 = HTTPconnection('www.baidu.com',80)  
  4. conn3 = HTTPConnection('www.baidu.com',80,True,10)  
  5. 错误实例:  
  6. conn3 = HTTPConnection('www.baidu.com:80',True,10)  


返回:
HTTPConnection类会实例并返回一个HTTPConnection对象


2、class httplib.HTTPSConnection
说明:
该类用于创建一个https类型的请求链接

原型:
HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout]]]]])
key_file:一个包含PEM格式的私钥文件
cert_file:一个包含PEM格式的认证文件
other:其它同http参数

实例:

  1. conn3 = HTTPSConnection('accounts.google.com',443,key_file,cert_file,True,10)  


返回:
同样返回一个HTTPSConnection对象

注意:
要创建https链接,必须要保证底层的socket模块是支持ssl的编译模式,即编译时ssl选项的开关是开着的


3、HTTPConnection对象request方法:
说明:
发送一个请求

原型:
conn.request(method, url[, body[, headers]])
method: 请求的方式,如'GET','POST','HEAD','PUT','DELETE'等
url: 请求的网页路径。如:'/index.html'
body: 请求是否带数据,该参数是一个字典
headers: 请求是否带头信息,该参数是一个字典,不过键的名字是指定的http头关键字

实例:

  1. conn.request('GET''/''', {'user-agent':'test'})  


返回:
无返回,其实就是相对于向服务其发送数据,但是没有最后回车


4、HTTPConnection对象getresponse方法
说明:
获取一个http响应对象,相当于执行最后的2个回车

原型/实例:

  1. res = conn.getresponse()  


返回:
HTTPResponse对象


5、HTTPConnection对象close()方法
说明:
关闭指定的httpconnect链接

实例:

  1. conn.close()  



6、HTTPResponse对象read方法
说明:
获得http响应的内容部分,即网页源码

原型:
body = res.read([amt])
amt: 读取指定长度的字符,默认为空,即读取所有内容

实例:

  1. body = res.read()  
  2. pbody = res.read(10)  


返回:
网页内容字符串


7、HTTPResponse对象的其它方法或属性
方法:
getheaders()
获得所有的响应头内容,是一个元组列表[(name,value),(name2,value2)]
getheader(name[,default])
获得指定的头内容
fileno()
socket的fileno

属性:
msg
所有的头信息,和getheaders方法一样,只不过这个是原始未处理的字符串
status
当次请求的状态
version
当次请求的http协议版本,10是http1.0, 11是http/1.1
reason
当次请求的结果的表述内容,200是ok,404是Not Found


总体实例:

  1. #!/usr/bin/env python    
  2. # -*- coding: utf-8 -*-    
  3. import httplib  
  4. import urllib  
  5.   
  6.    
  7. def sendhttp():  
  8.     data = urllib.urlencode({'@number'12524'@type''issue''@action''show'})     
  9.     headers = {"Content-type""application/x-www-form-urlencoded",  
  10.                "Accept""text/plain"}  
  11.     conn = httplib.HTTPConnection('bugs.python.org')  
  12.     conn.request('POST''/', data, headers)  
  13.     httpres = conn.getresponse()  
  14.     print httpres.status  
  15.     print httpres.reason  
  16.     print httpres.read()  
  17.              
  18.                 
  19. if __name__ == '__main__':    
  20.     sendhttp()   


当然还有其它的一些信息,比如异常类型,比如http的code对应表及查询字典等等,可以直接参考官网httplib文档:http://docs.python.org/library/httplib.html

《urlllib2》

  评论这张
 
阅读(43)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017