【转】urllib urllib2 httplib
httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现。
import httplib
conn = httplib.HTTPConnection("google.com") conn.request('get', '/') print conn.getresponse().read() conn.close()
复制代码
httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )
HTTPConnection类的构造函数,表示一次与服务器之间的交互,即请求/响应。参数host表示服务器主机,如:http://www.csdn.net/;port为端口号,默认值为80; 参数strict的 默认值为false, 表示在无法解析服务器返回的状态行时( status line) (比较典型的状态行如: HTTP/1.0 200 OK ),是否抛BadStatusLine 异常;可选参数timeout 表示超时时间。
HTTPConnection.request ( method , url [ , body [ , headers ]] )
调用request 方法会向服务器发送一次请求,method 表示请求的方法,常用有方法有get 和post ;url 表示请求的资源的url ;body 表示提交到服务器的数据,必须是字符串(如果method 是”post” ,则可以把body 理解为html 表单中的数据);headers 表示请求的http 头。
import httplib
conn = httplib.HTTPConnection("www.g.com", 80, False) conn.request('get', '/', headers = {"Host": "www.google.com", "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()
复制代码
Httplib模块中还定义了许多常量,如: urllib 和urllib2实现的功能大同小异,但urllib2要比urllib功能等各方面更高一个层次。目前的HTTP访问大部分都使用urllib2.
req = urllib2.Request('http://pythoneye.com')
response = urllib2.urlopen(req) the_page = response.read()
复制代码
FTP同样:
req = urllib2.Request('ftp://pythoneye.com')
urlopen返回的应答对象response有两个很有用的方法info()和geturl()
values ={'body' : 'test short talk','via':'xxxx'}
data = urllib.urlencode(values) req = urllib2.Request(url, data)
复制代码
get方式:
data['name'] = 'Somebody Here'
data['location'] = 'Northampton' data['language'] = 'Python' url_values = urllib.urlencode(data) url = 'http://pythoneye.com/example.cgi' full_url = url + '?' + url_values data = urllib2.open(full_url)
复制代码
使用Basic HTTP Authentication:
import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication... auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm='PDQ Application', uri='https://pythoneye.com/vecrty.py', user='user', passwd='pass') opener = urllib2.build_opener(auth_handler) # ...and install it globally so it can be used with urlopen. urllib2.install_opener(opener) urllib2.urlopen('http://www. pythoneye.com/app.html')
复制代码
使用代理ProxyHandler:
proxy_handler = urllib2.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib2.HTTPBasicAuthHandler() proxy_auth_handler.add_password('realm', 'host', 'username', 'password') opener = build_opener(proxy_handler, proxy_auth_handler) URLError–HTTPError: from urllib2 import Request, urlopen, URLError, HTTPError
复制代码
或者:
from urllib2 import Request, urlopen, URLError
req = Request(someurl) try: response = urlopen(req) except URLError, e: if hasattr(e, 'reason'): print 'Reason: ', e.reason elif hasattr(e, 'code'): print 'Error code: ', e.code else: .............
复制代码
通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生
req = urllib2.Request('http://pythoneye.com')
try: urllib2.urlopen(req) except URLError, e: print e.reason print e.code print e.read()
复制代码
最后需要注意的就是,当处理URLError和HTTPError的时候,应先处理HTTPError,后处理URLError
class HTTPHandler(AbstractHTTPHandler):
def http_open(self, req): return self.do_open(httplib.HTTPConnection, req) http_request = AbstractHTTPHandler.do_request_
复制代码
HTTPHandler是Openers当中的默认控制器之一,看到这个代码,证实了urllib2是借助于httplib实现的,同时也证实了Openers和Handlers的关系。 |
关注 - 2
粉丝 - 0
» 博主后一篇:【转帖】用python爬虫抓站的一些技巧总结
Feedback
#1楼[楼主] 回复 引用 查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import socks
import httplib2
url2 = r 'http://www.cnblogs.com/'
url = r 'http://passport.cnblogs.com/login.aspx'
body = [
( 'tbUserName' , 'xxx' ),
( 'tbPassword' , 'xxx' ),
( 'txtReturnUrl' , 'http://home.cnblogs.com/' ),
]
headers = { 'Content-type' : 'application/x-www-form-urlencoded' ,
'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17' }
#proxy = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'http://xxx.xxx.com', 8080)
http = httplib2.Http(
# proxy_info = proxy
)
response, content = http.request(url, 'GET' , headers = headers,
#connection_type='http',
)
# set cookie
headers = { 'Cookie' : response[ 'set-cookie' ]}
response, content = http.request(
url, 'POST' , headers = headers, body = urllib.urlencode(body)
)
print type (content)
try :
content = unicode (content)
self .view.setHtml(content)
except :
return
return
|
转载于:https://www.cnblogs.com/cheungjustin/archive/2012/01/05/2313509.html
【转】urllib urllib2 httplib相关推荐
- python中 urllib, urllib2, httplib, httplib2 几个库的区别
为什么80%的码农都做不了架构师?>>> 若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, ...
- python http2_python中 urllib, urllib2, httplib, httplib2 几个库的区别
若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了 python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httpli ...
- python通过get方式,post方式发送http请求和接收http响应-urllib urllib2
python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/xyc ...
- python http2_python2使用urllib/urllib2实现Http请求
在Http请求中,最为常见的两种请求为GET.POST请求,下面实现方式主要是以urllib/urilib2方式实现. urllib/urllib2是python中两个内置的模块,要实现Http功能, ...
- Python urllib, urllib2, urllib3 以及 requests 的区别 (附个人一些看法)
urllib python 标准 http 库, 无论是 python 2 还是 python 3 都有. urllib2 urllib2 是 只存在于 python 2 的一个 http 标准库. ...
- python urllib urllib2 urllib3 用法 区别
目录 简介 1.打开远程文件 2.获取远程文件 一.urllib 1. urllib.request 1. 发起GET请求 2. 发起POST请求 3. 添加Headers 4. Request对象 ...
- 爬虫入门二(urllib,urllib2)
看了下网上的概念,比较模糊不知道作用.利用例子总结了一下. 1.爬虫 网站有各种数据,获得自己感兴趣的数据并保存的一种脚本. 2.通信基础 1.post和get:(1)get是从服务器上获取数据,po ...
- urllib urllib2 自己用
2019独角兽企业重金招聘Python工程师标准>>> URllib2 和 URLLib 区别的场合 urllib2 can accept a Request object ...
- python3:urllib/urllib2
标题python3对urllib和urllib2进行了重构 python3对urllib和urllib2进行了重构,拆分成了urllib.request,urllib.response, urllib ...
最新文章
- 五款常用协议分析处理工具推荐
- 深度学习博士发出灵魂拷问:我是在做算法还是在调参?
- 【Redis学习笔记】2018-07-11 Redis指令学习5
- 【bzoj4571SCOI2016美味】
- ASCII + Url + Base64
- 关于调试过程中单片机复位的几点心得与体会
- Silverlight中如何实现上下标的显示
- iterm2 ssh 乱码_【已解决】Mac中iTerm2通过SSH连接远程服务器
- mysql5.7.24 安装步骤_MySQL5.7.24解压版安装步骤
- 用Python标准库turtle画一头金牛,祝您新年牛气冲天!
- 价格优化与定价管理软件行业调研报告 - 市场现状分析与发展前景预测
- 设计模式 - (3)抽象工厂模式(创建型)
- opencv 梯度幅值_OpenCV学习:图像边缘检测
- stm32最小原理图的PCB图绘制(含AHT20温度传感器)
- SPSS基础教程—怎样对数据进行综合评价排名
- S3C2440裸机------内存控制器
- c语言编程樱花树,分形樱花树(画画)
- float 精度探究
- 用户吐槽不能给安卓手机发视频,库克:“给你妈妈买台 iPhone !”
- win32 007
热门文章
- 生产环境中on yarn模式是否采用yarn session
- yarn界面中的Minimum Allocation和Maximum Allocation与yarn-site.xml中参数的对应关系
- hbase数据导入到mysql(转载+自己验证整理,目前失败)
- matlab求借带参数的方程组
- 'django_tables2' is not a registered tag library. Must be one of:
- 使用cython加密python代码
- 理解spark闭包以及broadcast(转载)
- The requested URL was not found on the server
- Linux下实现脚本监测特定进程占用内存情况
- 18.12.04 有品面试小记