概述
这篇文章是接上篇:https://blog.youkuaiyun.com/GoSaint/article/details/100902655 。主要介绍另外一种请求方式。Request。由于urlopen()方法参数有限,并不能满足我们所有的需求,因此,Request就应用而生啦。
Request
import urllib.request
request=urllib.request.Request('https://python.org')
response=urllib.request.urlopen(request)
print(response.read().decode('UTF-8'))
上述代码使用了urlopen()方法,但是传递的参数不是url地址,而是request对象。请看class Request
"""
class Request:(url, data=None, headers={},
origin_req_host=None, unverifiable=False,method=None):
"""
url | 请求的URL |
data | byte类型,一般需要解析,使用parse.urlencode编码 |
headers | 请求头,字典类型 |
| 请求的host名称或者IP地址 |
unverifiable | 表示这个请求是否是无法验证的,默认是 False ,意思就是说用户没 有足够权限来选择接收这个请求的结果 例如,我们请求 HTML 文档中的图片,但是我 们没有向动抓取图像的权限,这时 unverifiable 的值就是 True |
method | 请求类型POST GET PUT |
请求示例程序:
import urllib.request
import urllib.parse
url='http://httpbin.org/post'
dict={'name':'Germy'}
headers={
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Host':'httpbin.org'
}
data=bytes(urllib.parse.urlencode(dict),'UTF-8')
req=urllib.request.Request(url=url,data=data,headers=headers,method='POST')
response=urllib.request.urlopen(req)
print(response.read().decode('UTF-8'))
返回结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"name": "Germy"
},
"headers": {
"Accept-Encoding": "identity",
"Content-Length": "10",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
},
"json": null,
"origin": "117.176.186.251, 117.176.186.251",
"url": "https://httpbin.org/post"
}
req=urllib.request.Request(url=url,data=data,method='POST')
req.add_header('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36')
也可以使用add_header来添加请求头。