自己翻译一遍加深记忆吧,翻译不好的地方还请多多谅解,如需转载请附上本文地址并注明!
官方原文地址传送门
urllib2
组件定义了一些帮助你在一个复杂世界打开URLs(绝大分在HTTP协议下)的类和函数 -- 基础,摘要式身份验证,重定向,cookie等等d�。
注意⚠️:
urllib2 组件在Python3已经被分割成了几个模块,分别为:urllib.request, urllib.parse, urllib.error。
2to3 工具将会在转换代码到Python3时自动导入对应文件。
urlopen
urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])
打开url参数指定的字符串或者Request对象类型的URL链接地址
1. data 参数
data参数可能是一个指定了附加发送给服务器数据的字符串,或则是None
如果不需要发送。在目前,HTTP协议请求是仅有的使用data的请求;HTTP协议请求将会是POST方式而不是GET如果提供了data参数。 data 参数应是一个标准的application/x-www-form-urlencoded
格式的缓存(buffer)。 urllib.urlopen()
函数接受一个字典或者二元组序列参数然后返回一个上述格式的字符串。urllib2组件使用包含 connection:close
的头部发送HTTP/1.1请求。
2. timeout 参数
可选的 timeout 指定了一个以秒为单位的超时参数来屏蔽比如尝试链接的操作
(如果没有设定,默认的全局超市设置将会被采用)。 这个参数只有对 HTTP,HTTPS和 FTP 链接起作用。
3. cafile 和 capath 参数
可选的 cafile 和 capath 参数明确了一个用于HTTPS请求的受信任CA证书集。cafile应指向单个包含CA证书集的文件,而capath应指向可哈希的证书文件目录。更多信息查看ssl.SSLContext.load_verify_locations()
4.cadefault 参数
cadefault参数是忽略的。
5. context 参数
如果context 存在,它一定是一个描述不同SSL选项的 ssl.SSLContext 实例。查看HTTPSConnection获取更多的细节。
6. 返回值
该方法用三个额外的方法返回一个文件形式的(file-like)对象
- geturl() — 返回从URL获取的资源,通常用来判定是否跟随跳转。
- info() — 以 mimetools.Message 实例的格式返回页面的元数据(meta-information) ,比如头部。(查看 HTTP Headers)
- getcode() — 返回HTTP响应的状态码。
7.其它
发生错误的时候以 URLError 报错
注意,返回值可能是None,如果没有处理器处理请求(然而默认安装的全局 OpenerDirector使用UnknownHandler来确保请求没有被处理)。
另外,如果代理设置被检测到(比如,当 _proxy environment
变量像 http_proxy
被设置),ProxyHandler
会默认安装来确保请求在整个代理中会被处理。
2.6版本:新增 timeout
2.79版本:增加 cafile, capath, cadefault, context
instal_opener
urllib2.install_opener(opener)
安装一个openerDicrector
实例作为默认的全局打开者(opener)。 只有在你想要 urlopen
使用特定的打开者的时候菜安装它;否则,简单地调用OpenerDicrector.open()
来替换urlopen()
。 这种方式不会检查是否是真的OpenerDicrecot
,任何带有合适接口的类都会起作用。
build_opener
urllib2.build_opener([handler, ...])
返回OpenerDirector
实例,以设定的次序链接处理器(handlers)。 handlers可以是BaseHandler
的实例,或者BaseHandler
的子类(这个子类必须有不带参数的构造器)。 以下类的实例将会在handlers之前,除非handlers包含它们、它们的实例或者子类: ProxyHandler
(如果代理设置被检测到),UnknownHandler
, HTTPHandler
, HTTPDefaultErrorHandler
, HTTPRedirectHandler
, FTPHandler
, FileHandlere
, HTTPErrorProcessor
。
如果Python 安装了SSL支持( 比如,ssl
组件是否可以被导入), HTTPHandler
也将会被添加。
从 Ptthon2.3 开始 BaseHandler
子类也会它的handler_order
属性来改它在处理器列表中的位置。
urillib2.request类
class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
URL请求的抽象类
url 包含有效URL的字符串
data 参数可能是一个指定了附加发送给服务器数据的字符串,或则是
None
如果不需要发送。在目前,HTTP协议请求是仅有的使用data的请求;HTTP协议请求将会是POST方式而不是GET如果提供了data参数。 data 参数应是一个标准的application/x-www-form-urlencoded
格式的缓存(buffer)。urllib.urlopen()
函数接受一个字典或者二元组序列参数然后返回一个上述格式的字符串。urllib2组件使用包含connection:close
的头部发送HTTP/1.1请求。headers 应是一个字典,键值对将被作为参数传递给
add_header()
。这常用于“欺骗”User-Agent
这个头部值,该值被浏览器用于鉴别浏览者。一些HTTP服务器仅允许来自普通浏览器的请求而不是脚本。比如,Mozilla 的火狐(FireFox)浏览器可能被识别为Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11
,而 urllib2 的默认用户代理字符串是Python-urllib/2.6( python2.6中)
。
The final two arguments are only of interest for correct handling of third-party
最后的两个参数仅是为了校正处理感兴趣的第三方HTTP cookies 数据。
HTTP cookies:
-
origin_req_host 应是最初处理请求的主机,默认是
RFC 2965
。 默认等于cookielib.request_host(self)
。 这是用户初始化的最开始请求的主机名或IP地址。 比如请求的是一份HTML 文档中的一幅图片,这应是发起获取含有图片页面的请求方主机子。 -
unverifiable 应如RFC2965,指明请求是否是无法校验的。默认为
False
。 无法校验的请求的URL是用户无法选择批准通过的 。比如,请求包含在HTML文档中的一幅图片,用户无法选择批准自动获取的图片,这时的值true
。
urllib2.OpennerDirector
class urllib2.OpenerDirector**
OpenerDirector 类经由 BaseHandlers 链接起来的URLs打开。 它管理处理器链和错误恢复 。
urllib2.BaseHandler
class urllib2.BaseHandler**
这是所有处理器的基类,它仅仅处理一些简单的注册机制(译:简单初始化下)。
urllib2.HTTPDefaultErrorHandler
class urllib2.HTTPDefaultErrorHandler**
一个定义了默认HTTP错误响应处理器的类;所有的响应都会被转入HTTPError异常处理。
urllib2.BaseHandler
class urllib2.HTTPRedirectHandler**
处理重定向的类。
urllib2.BaseHandler
class urllib2.HTTPCookieProcessor([cookiejar])¶
处理HTTP Cookies的类。
urllib2.BaseHandler
class urllib2.ProxyHandler([proxies])¶
使请求经历代理。如果 proxies 有设置,它一定是一个映射了协议名字到代理URL的字典。(译:字典[协议名]=代理的URL
)默认的处理器的作用是从环境变量<protocol>_proxy
中读取代理列表。
如果没有设置环境变量,那么在Windows中,环境变量代理设置是从注册表的Internet Setting
部分获取;在Mac OS X中,代理环境代理信息是从OS X System Congfiguration Framework(系统配置框架)
获取。
传入一个空字典可以取消自动侦测代理。