原文摘自网络,请参考网站:
主要缩小了原文,使之容易看。 请不要喷。 谢谢你。
5主要功能
request处理客户端的请求
响应处理服务端的响应
parse解析url
下一个讨论是request
urllib.request模块定义了打开URLs (通常为HTTP协议)的复杂操作(如basic、摘要模式验证、重定向和cookie )的方法和类。 该模块化仿真文件模块实现的将本地文件路径更改为远程url。 因此,函数返回类文件对象(file-like object )
urllib.request.urlopen(URL,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context
url可以是字符串形式或Request对象
如果data参数有值,则在post模式下响应。 否则,缺省情况下进入GET模式
urllib.request模块使用HTTP/1.1的无连接状态协议
5.2 urlopen ) )函数返回类文件对象,并提供以下内置方法:
read ()、readline、readlines ()、fileno ()、close () )的方法与文件对象使用的方法完全相同
info ()返回表示从远程服务器返回的标头信息的httplib.HTTPMessage对象
返回getcode(:http状态代码。 (详情请参阅https://tools.IETF.org/html/RFC 7231 # section-6 )
对于http请求:
1xx (信息) :请求已收到。 正在进行中
2xx (安全) :请求接收成功、分析和完成
3xx (重定向) :需要重定向
4xx (客户端) :客户端问题,请求中存在语法错误,找不到网址
5xx (服务器错误) :服务器问题
geturl () :返回请求的url
5.3 urllib2介绍
与urllib相比,显著差异如下:
1 ) urllib2可以接受请求类的实例以设置URL请求的headers,urllib只能接受URL。 也就是说,使用urllib时不能伪装用户代理字符串等。
2 ) urllib为encode发送的data提供urlencode方法,但在urllib2中不提供。 因此,urllib经常和urllib2一起使用。
2:urllib2的常用方法
2.1 urllib2.urlopen
urlopen ) )是最简单的请求方法,可以打开url并返回类文件对象,然后使用该对象读取返回的内容
urllib2.urlopen(URL[,data][,timeout] ) )
参数:
url:可以是包含url的字符串或urllib2.request类的实例。
data:是编码的开机自检数据。 通常使用urllib.urlencode ()进行编码。
没有data参数时为GET请求,设定了data参数时为POST请求
timeout:是可选超时时间(以秒为单位),用于设置请求块的超时时间。 如果未设置,则使用仅对HTTP、HTTPS和FTP有效的全局缺省timeout参数
urlopen ) )返回的文件对象u,则支持以下常用方法:
u.read([nbytes] )读取nbytes个数据作为字节字符串
u.readline ()将一行文本作为字节字符串读取
u.readlines ()读取所有输入行并返回列表
u.close ) )关闭链接
u.getcode ) )返回整数形式的HTTP响应代码。 例如,成功返回200,如果找不到文件,则返回404
u.geturl ) )返回返回的数据的实际url,但考虑到会出现重定向问题
u.info ) )返回具有与url相关信息的映射对象。
对于HTTP,返回的服务器响应包含HTTP标头。
对于FTP,返回的标头包含“内容长度”。
对于本地文件,返回的标头包括" ‘content-length "和" content-type "字段。
注意:
类文件对象u在二进制模式下工作。 如果需要以文本形式处理响应数据,则必须使用codecs模块等
方式解码数据。
2.2 urllib2.request
新的请求实例
请求(URL [ data,headers[,origin_req_host,[unverifiable]]]] )
说明:
对于相对简单的请求,urlopen (的参数url表示url,但如果需要执行更复杂的操作,如更改HTTP标头,则可以创建Request实例并将其用作url参数
参数:
url:是url字符串。
data:是与url提交相关的数据。 例如,要开机自检的数据。 但是,请注意,指定data参数会将HTTP请求从“获取”更改为“开机自检”。
headers:是一个表示HTTP标头的键值映射,即包含要发送的header中包含的内容的词典。
origin_req_host:通常是发出请求的主机的名称。如果请求的是无法验证的url,则以下参数unverifiable将设置为TRUE : 通常不是用户直接输入的url。 例如,嵌入在加载图像的页面中的url
假设Request实例r,其重要方法是:
r.add_data(data )将数据添加到请求中。 如果请求是HTTP请求,则方法将更改为“‘post”。
data是提交给指定url的数据。 请注意,在此方法中,data将使用当前data替换,而不是跟随以前设置的数据。
r.add_header(key,val )将header信息添加到请求中。 key是标头名称,val是标头值,两个参数都是字符串。
r.addunredirectedheader(key,val )的角色基本相同,但不会添加到重定向请求中。
r.set_proxy(host,type )正在准备向服务器请求。 用主机替换原始主机,用type替换原始请求类型。
2.3异常处理
如果无法处理respons,则urlopen抛出urlerror
urllib2.URLError :
urllib2.HTTPError :
HTTPerror是在特殊情况下抛出HTTP URL的URLError的子类。
URL错误:
通常,抛出urlerror是因为没有网络连接(没有到特定服务器的连接),或者没有特定服务器。 在这种情况下,包含reason属性的异常以包含错误代码和文本错误消息的tuple格式抛出。