1、学习get和post请求,尝试使用requests或者是urllib用get方法baidu发出一个请求,并将其返回结果输出
import urllib.request
url = ‘https://www.baidu.com’
response = urllib.request.urlopen(url)
print(response.read())
输出结果是:
2、断开网络再发出请求,结果是什么?
结果是:urllib.error.URLError: <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
3、了解什么是请求头?如何添加请求头?
1)请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
以下是访问baidu的请求头信息:
2)添加请求头可以采用两种方式:
第一种:
将请求头存到字典里面,再将该请求头作为参数传到request模块的Request类中。如下:
req_headers = {
}
res = urllib.request.Request(url=req_url, headers=req_headers)
添加完请求头后的运行结果如下:
第二种:
调用Request类的add_header方法进行请求头添加
value = ‘123’
res = urllib.request.Request(url=req_url)
resp = res.add_header(‘key’,value)
4、总结:
1)headers中最好不要加这一行:‘Accept-Encoding’:‘gzip, deflate, br’
否则解码时会报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x8b in position 1: invalid start byte
原因:这条信息代表本地可以接收压缩格式的数据,因为你的程序没有解压这个文件,所以删掉这行就不会出现问题了
2)代码示例:
import urllib.request
req_url = r'https://www.baidu.com'
req_headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
# 'Accept-Encoding':'gzip, deflate, br',
# 加上上一行会报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
# 原因:这条信息代表本地可以接收压缩格式的数据,因为你的程序没有解压这个文件,所以删掉这行就不会出现问题了
'Accept-Language':'en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6',
'Connection':'keep-alive',
'Host':'www.baidu.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
}
res = urllib.request.Request(url=req_url, headers=req_headers)
response = urllib.request.urlopen(res)
html = response.read()
print(html.decode())