python3从零学习-5.10.5、urllib—URL 处理模块

源代码: Lib/urllib/

urllib 是一个收集了多个用到 URL 的模块的包:

urllib.request 打开和读取 URL

urllib.error 包含 urllib.request 抛出的异常

urllib.parse 用于解析 URL

urllib.robotparser 用于解析 robots.txt 文件

源码: Lib/urllib/request.py

urllib.request 模块定义了适用于在各种复杂情况下打开 URL(主要为 HTTP)的函数和类 — 例如基本认证、摘要认证、重定向、cookies 及其它。

 

urllib.request 模块定义了以下函数:

 

  • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)¶

打开统一资源定位地址 url,可以是一个字符串或一个 Request 对象。

 

  • urllib.request.install_opener(opener)

安装OpenerDirector实例作为默认全局打开器。安装一个开启器是必要的,如果你想urlopen使用该开启器;否则,只需调用OpenerDirector.open()而不是urlopen()。代码没有检查真正的OpenerDirector,任何具有适当接口的类都可以工作。

 

  • urllib.request.build_opener([handler, ...])

返回一个OpenerDirector实例,该实例按照给定的顺序连接处理程序。处理程序可以是BaseHandler的实例,也可以是BaseHandler的子类(在这种情况下,必须能够不使用任何参数调用构造函数)。ProxyHandler(如果检测到代理设置),UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor。

 

  • urllib.request.pathname2url(path)

将路径名路径从路径的本地语法转换为URL的路径组件中使用的形式。这不会产生一个完整的URL。返回值已经被quote()函数括起来了。

 

  • urllib.request.url2pathname(path)

将路径组件路径从按百分比编码的URL转换为路径的本地语法。这不能接受完整的URL。这个函数使用unquote()来解码路径。

 

  • urllib.request.getproxies()

这个helper函数将scheme的字典返回给代理服务器URL映射。它扫描环境中的变量<scheme>_proxy,在不区分大小写的方法中,首先扫描所有操作系统,如果找不到它,就从Mac OSX系统配置和Windows系统注册表中查找代理信息。如果同时存在小写和大写环境变量(且不一致),则首选小写。

 

  • class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)¶

这个类是URL请求的抽象。

 

  • class urllib.request.OpenerDirector

OpenerDirector类通过链接在一起的BaseHandlers打开url。它管理处理程序的链接,并从错误中恢复。

 

  • class urllib.request.BaseHandler

这是所有注册处理程序的基类——只处理注册的简单机制。

 

  • class urllib.request.HTTPDefaultErrorHandler

定义HTTP错误响应的默认处理程序的类;所有响应都被转化为HTTPError异常。

 

  • class urllib.request.HTTPRedirectHandler

一个用于处理重定向的类。

 

  • class urllib.request.HTTPCookieProcessor(cookiejar=None)

一个用于处理 HTTP Cookies 的类。

 

  • class urllib.request.ProxyHandler(proxies=None)

导致请求通过代理。如果指定了代理,它必须是映射协议名称到代理的url的字典。默认情况下从环境变量<protocol>_proxy中读取代理列表。如果没有设置代理环境变量,那么在Windows环境中,从注册表的Internet设置部分获取代理设置,在Mac OS X环境中,从OS X系统配置框架获取代理信息。

 

  • class urllib.request.HTTPPasswordMgr

保持数据库的(域,uri) ->(用户,密码)映射。

 

  • class urllib.request.HTTPPasswordMgrWithDefaultRealm

保持数据库的(域,uri) ->(用户,密码)映射。None的领域被认为是all -all领域,如果没有其他领域符合该领域,则对其进行搜索。

 

  • class urllib.request.HTTPPasswordMgrWithPriorAuth

HTTPPasswordMgrWithDefaultRealm的一个变体,它也有一个uri -> is_authenticated映射的数据库。可以被BasicAuth处理程序用于确定何时立即发送身份验证凭据,而不是首先等待401响应。

 

  • class urllib.request.HTTPHandler

处理打开HTTP url的类。

 

  • class urllib.request.HTTPSHandler(debuglevel=0, context=None, check_hostname=None)

处理HTTPS url打开的类。上下文和check_hostname与http.client.HTTPSConnection中的含义相同。

 

  • class urllib.request.FileHandler

打开本地文件。

 

  • class urllib.request.DataHandler

开放数据的url。

 

  • class urllib.request.FTPHandler

打开 FTP 统一资源定位地址。

 

  • class urllib.request.CacheFTPHandler

打开FTP url,保持打开FTP连接的缓存以最小化延迟。

 

  • class urllib.request.UnknownHandler

用于处理未知url的all类。

 

  • class urllib.request.HTTPErrorProcessor

处理HTTP错误响应。

Request 对象

 

下面的方法描述了Request的公共接口,因此所有这些方法都可以在子类中被覆盖。它还定义了几个公共属性,客户机可以使用这些属性检查解析后的请求。

 

  • Request.full_url

传给构造函数的原始 URL。

 

  • Request.type

The URI scheme.

 

  • Request.host

URI权限,通常是主机,但也可能包含一个由冒号分隔的端口。

 

  • Request.origin_req_host

请求的原始主机,不含端口。

 

  • Request.selector

URI 路径。若 Request 使用代理,选择器将会是传给代理的完整 URL。

 

  • Request.data

The entity body for the request, or None if not specified.

 

  • Request.unverifiable

布尔,表明请求是否为 RFC 2965 中定义的无法证实的。

 

  • Request.method

要使用的HTTP请求方法。默认情况下,它的值是None,这意味着get_method()将对要使用的方法进行常规计算。它的值可以通过在请求子类的类级别上设置默认值来设置(从而覆盖get_method()中的默认计算),或者通过方法参数向请求构造函数传递一个值。

 

  • Request.get_method()

返回一个指示HTTP请求方法的字符串。如果请求。方法不是None,返回它的值,否则返回'GET'如果请求。data是None,或者“POST”(如果不是的话)。这只对HTTP请求有意义。

在 3.3 版更改: get_method now looks at the value of Request.method.

 

  • Request.add_header(key, val)

向请求添加另一个头。目前,除了HTTP处理程序外,所有处理程序都忽略了头,在HTTP处理程序中,头被添加到发送到服务器的头列表中。注意,不能有多个头具有相同的名称,并且以后的调用将覆盖以前的调用,以防键冲突。目前,这不是HTTP功能的损失,因为当使用超过一次有意义的所有头有一个(特定的头)方式获得相同的功能使用一个头。

 

  • Request.add_unredirected_header(key, header)

添加一个不会被加入重定向请求的头部。

 

  • Request.has_header(header)

返回实例是否有命名头(检查常规的和未重定向的)。

 

  • Request.remove_header(header)

从请求实例中删除命名头(包括常规头和未重定向头)。

 

  • Request.get_full_url()

返回构造器中给定的 URL。

返回 Request.full_url

 

  • Request.set_proxy(host, type)

通过连接到代理服务器准备请求。主机和类型将替换实例的主机和类型,实例的选择器将是构造函数中给出的原始URL。

 

  • Request.get_header(header_name, default=None)

返回给定标头的值。如果标题不存在,则返回默认值。

 

  • Request.header_items()

返回请求头的元组列表(header_name, header_value)。