urllib.request
模块定义了适用于在各种复杂情况下打开 URL (主要为 HTTP) 的函数和类 --- 例如基本和精简验证,重定向、cookies 及其它。
urllib.request.
urlopen
(url,data = None,[ timeout,] *,cafile = None,capath = None,cadefault = False,context = None )
打开URL url,可以是字符串或 Request
对象。
data必须是指定要发送到服务器的其他数据的对象,或者None
如果不需要此类数据。详情Request
请见。
urllib.request模块使用HTTP / 1.1并Connection:close
在其HTTP请求中包含标头。
可选的timeout参数指定阻塞操作(如连接尝试)的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。这实际上仅适用于HTTP,HTTPS和FTP连接。
如果指定了context,则它必须是ssl.SSLContext
描述各种SSL选项的实例。有关HTTPSConnection
详细信息,请参阅
可选的cafile和capath参数为HTTPS请求指定一组可信CA证书。 cafile应指向包含一组 CA证书的单个文件,而capath应指向散列证书文件的目录。更多信息可以在中找到ssl.SSLContext.load_verify_locations()
。
该cadefault参数被忽略。
此函数始终返回一个对象,该对象可用作 上下文管理器并具有诸如的方法
geturl()
---返回检索到的资源的URL,通常用于确定是否遵循重定向info()
---以email.message_from_string()
实例的形式返回页面的元信息,例如标题(请参阅 HTTP标题的快速参考)getcode()
- 返回响应的HTTP状态代码。
对于HTTP和HTTPS URL,此函数返回http.client.HTTPResponse
稍微修改的 对象。除了上面的三个新方法之外,msg属性包含与属性相同的信息reason
---服务器返回的原因短语---而不是文档中指定的响应头HTTPResponse
。
对于遗留URLopener
和FancyURLopener
类显式处理的FTP,文件和数据URL以及请求 ,此函数返回一个urllib.response.addinfourl
对象。
引发URLError
协议错误。
请注意,None
如果没有处理程序处理请求,则可能会返回(尽管默认安装的global OpenerDirector
用于UnknownHandler
确保永远不会发生这种情况)。
此外,如果检测到代理设置(例如,当*_proxy
环境变量如http_proxy
已设置), ProxyHandler
默认安装并确保通过代理处理请求。
urllib.urlopen
Python 2.6及更早版本的遗留函数已经停止使用; urllib.request.urlopen()
对应旧的urllib2.urlopen
。通过传递字典参数来完成的代理处理urllib.urlopen
可以通过使用ProxyHandler
对象来获得 。
在 3.2 版更改: cafile and capath were added.
在3.2版更改:如果可能,现在支持HTTPS虚拟主机(即,如果 ssl.HAS_SNI
为true)。
3.2 新版功能: data can be an iterable object.
在 3.3 版更改: cadefault was added.
在 3.4.3 版更改: context was added.
3.6版后已移除:cafile,capath和cadefault不赞成使用上下文。请ssl.SSLContext.load_cert_chain()
改为使用,或者 ssl.create_default_context()
为您选择系统的可信CA证书。
urllib.request.
install_opener
(开场白)
安装OpenerDirector
实例作为默认的全局开启工具。只有在你想让urlopen使用那个开启器时才需要安装开启器。否则,只需打电话OpenerDirector.open()
而不是 urlopen()
。代码不检查是否真实 OpenerDirector
,任何具有适当接口的类都可以工作。
urllib.request.
build_opener
([ 代理,...... ] )
返回一个OpenerDirector
实例,它按照给定的顺序链接处理程序。handler s可以是实例,也可以是BaseHandler
子类BaseHandler
(在这种情况下,必须可以在没有任何参数的情况下调用构造函数)。以下类的实例将在前面的处理程序 S,除非处理器小号含有它们,将它们的它们的实例或亚类:ProxyHandler
(如果检测到代理设置), ,UnknownHandler
,HTTPHandler
, HTTPDefaultErrorHandler
,HTTPRedirectHandler
,FTPHandler
,。FileHandler
HTTPErrorProcessor
如果Python安装具有SSL支持(即,如果ssl
可以导入模块),HTTPSHandler
也将添加。
一个BaseHandler
子类,还可以改变其handler_order
属性,修改其在处理程序列表中的位置。
urllib.request.
pathname2url
(路径)
将路径名路径从路径的本地语法转换为URL路径组件中使用的表单。这不会产生完整的URL。将使用该quote()
函数引用返回值。
urllib.request.
url2pathname
(路径)
将路径组件路径从百分比编码的URL 转换为路径的本地语法。这不接受完整的URL。此函数用于 unquote()
解码路径。
urllib.request.
getproxies
()
此帮助程序函数返回代理服务器URL映射的方案字典。它首先在环境中扫描<scheme>_proxy
所有操作系统的名称不区分大小的变量,当它找不到它时,从Mac OS X的Mac OSX系统配置和Windows的Windows系统注册表中查找代理信息。如果小写和大写环境变量都存在(并且不同意),则首选小写。
注解
如果REQUEST_METHOD
设置了环境变量(通常表示您的脚本在CGI环境中运行),则将忽略环境变量HTTP_PROXY
(大写_PROXY
)。这是因为客户端可以使用“Proxy:”HTTP标头注入该变量。如果需要在CGI环境中使用HTTP代理,请ProxyHandler
显式使用 ,或确保变量名称为小写(或至少为_proxy
后缀)。
提供以下课程:
class urllib.request.
Request
(url,data = None,headers = {},origin_req_host = None,unverifiable = False,method = None )
此类是URL请求的抽象。
url应该是包含有效URL的字符串。
data必须是指定要发送到服务器的其他数据的对象,或者None
如果不需要此类数据。目前,HTTP请求是唯一使用数据的请求。支持的对象类型包括字节,类文件对象和可迭代。如果没有 Content-Length
,也没有Transfer-Encoding
报头字段已经被设置,HTTPHandler
将根据的类型来设置这些标题数据。 Content-Length
将用于发送字节对象,而在中指定 Transfer-Encoding: chunked
RFC 7230,第3.3.1节将用于发送文件和其他迭代。
对于HTTP POST请求方法,数据应该是标准application / x-www-form-urlencoded格式的缓冲区。该urllib.parse.urlencode()
函数采用2元组的映射或序列,并以此格式返回ASCII字符串。在用作数据参数之前,应将其编码为字节。
标题应该是字典,并且将被视为 add_header()
使用每个键和值作为参数调用。这通常用于“欺骗” User-Agent
标头值,浏览器使用该标头值来标识自身 - 某些HTTP服务器仅允许来自常见浏览器而非脚本的请求。例如,Mozilla Firefox可能将自己标识为,而 默认的用户代理字符串是 (在Python 2.6上)。"Mozilla/5.0 (X11; U;Linux i686) Gecko/20071127 Firefox/2.0.0.11"
urllib
"Python-urllib/2.6"
Content-Type
如果存在data 参数,则应包含适当的标头。如果未提供此标头且数据 不是None,则将添加为默认值。Content-Type: application/x-www-form-urlencoded
最后两个参数仅对正确处理第三方HTTP cookie感兴趣:
origin_req_host应该是origin事务的请求主机,如下所定义RFC 2965。它默认为http.cookiejar.request_host(self)
。这是用户启动的原始请求的主机名或IP地址。例如,如果请求是针对HTML文档中的图像,则该请求应该是包含图像的页面请求的请求主机。
无法核实的应表明该请求是否无法核实,如下所述RFC 2965。它默认为False
。无法验证的请求是用户无法选择批准的URL。例如,如果请求是针对HTML文档中的图像,并且用户没有选择批准自动获取图像,则应该这样。
method应该是一个字符串,表示将使用的HTTP请求方法(例如'HEAD'
)。如果提供,则其值存储在 method
属性中并由其使用get_method()
。默认值是'GET'
如果数据是None
或'POST'
以其他方式。子类可以通过method
在类本身中设置属性来指示不同的默认方法 。
注解
如果数据对象无法多次传递其内容(例如,只能生成一次内容的文件或可迭代文件),则请求将无法按预期工作,并且会重试HTTP重定向或身份验证请求。该数据被发送到头部后马上HTTP服务器。图书馆不支持100次继续期望。
在 3.3 版更改: Request.method
argument is added to the Request class.
在 3.4 版更改: Default Request.method
may be indicated at the class level.
在3.6版更改:如果Content-Length
没有提供错误并且数据既不None
是字节对象也不引发错误。回过头来使用分块传输编码。
类urllib.request.
OpenerDirector
本OpenerDirector
类打开通过URL BaseHandler
链接在一起秒。它管理处理程序的链接以及从错误中恢复。
类urllib.request.
BaseHandler
这是所有注册处理程序的基类 - 并且只处理简单的注册机制。
类urllib.request.
HTTPDefaultErrorHandler
一个定义HTTP错误响应的默认处理程序的类; 所有回复都变成了HTTPError
例外。
类urllib.request.
HTTPRedirectHandler
一个处理重定向的类。
class urllib.request.
HTTPCookieProcessor
(cookiejar = None )
一个处理HTTP Cookie的类。
class urllib.request.
ProxyHandler
(proxies = None )
导致请求通过代理。如果给出了代理,则它必须是将协议名称映射到代理URL的字典。默认设置是从环境变量中读取代理列表 <protocol>_proxy
。如果未设置代理环境变量,则在Windows环境中,从注册表的“Internet设置”部分获取代理设置,在Mac OS X环境中,从OS X系统配置框架检索代理信息。
要禁用自动检测的代理,请传递一个空字典。
该 no_proxy
环境变量可用于指定不应通过代理访问的主机; 如果设置,它应该是逗号分隔的主机名后缀列表:port
,例如,可选择附加 cern.ch,ncsa.uiuc.edu,some.host:8080
。
注解
HTTP_PROXY
如果REQUEST_METHOD
设置了变量,将被忽略; 请参阅文档getproxies()
。
类urllib.request.
HTTPPasswordMgr
保留映射数据库 。(realm, uri) -> (user, password)
类urllib.request.
HTTPPasswordMgrWithDefaultRealm
保留映射数据库 。一个领域 被认为是一个包罗万象的领域,如果没有其他领域适合的话就会被搜索。(realm,uri) -> (user, password)
None
类urllib.request.
HTTPPasswordMgrWithPriorAuth
其变体HTTPPasswordMgrWithDefaultRealm
还有一个映射数据库。BasicAuth处理程序可以使用它来确定何时立即发送身份验证凭据,而不是先等待响应。uri -> is_authenticated
401
3.5 新版功能.
class urllib.request.
AbstractBasicAuthHandler
(