使用urllib进行get或post请求

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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值