小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
复习回顾
我们在前面urllib模块初识中对urllib模块中包含request、parse、error、robotparse四个模块,其中request模块主要对http发起请求。
我们都知道HTTP协议中主要有8种请求方式
- GET请求:请求指定的页面信息
- POST请求:向服务器提交数据请求处理结果
- HEAD请求:获取报文头
- PUT请求:向服务器上传新资源
- TRACE请求:回显服务器收到的请求,主要用于测试和诊断
- CONNECT请求:HTTP1.1协议预留给能够将连接改为管道方式的代理服务器
- OPTIONS请求:允许查看服务端端性能
- DELETE请求:请求服务器删除指定的页面
本期,我们对urllib.request模块对HTTP协议常用的请求进行学习,Let's go~
1. 基本网络请求
我们可以直接使用urllib.request模块提供的urlopen(url,data=None)方法
urlopen方法可以打开url资源
- 传入的url地址后,会返回一个http.clinet.HTTPResponsed对象
根据返回的http.clinet.HTTPResponsed对象,有两种方式可以读取资源
- 直接调用read 方式进行读取
- 借助with文本资源管理器来进行读取
PS:由于返回数据都是二进制的,读取完后需要调用decode解析成utf-8格式输出
import urllib.request
# 打开URL资源
re = urllib.request.urlopen("https://juejin.cn/post/7024105564426731551")
# 方式一:按字节读取资源300字节
data = re.read(300)
# 将字节打印出来
print(data.decode("utf-8"))
# 方式二:with 文本管理器来进行打开读取资源
with re as f:
print(f.read(300).decode("utf-8"))
2. GET请求
GET 请求是HTTP协议中最常见的请求方式之一,其显著特点在于所有请求的数据都在URL中
在urllib.request模块中,模拟实现GET方式有如下几种方式
urllib.request模块使用urlopen()方法
- urlopen()方法默认就是采用GET请求方法
- urlopen()发送GET请求参数,无需使用data属性,直接把请求参数附加在URL之后即可
import urllib.request
import urllib.parse
# 请求的数据
param = urllib.parse.urlencode({"bid": "juejin_web"})
url = "https://i.snssdk.com/slardar/sdk_setting?%s" % param
# 打开URL资源
re = urllib.request.urlopen(url)
# 按字节读取资源300字节
data = re.read(300)
# 将字节打印出来
print(data.decode("utf-8"))
3. POST请求
POST 请求特点是把请求的数据放在body里,URL不用显示请求的数据
-
方式一:使用urlopen()方法来进行POST请求
- urlopen方法需要借助data属性
- urlopen方法第一个参数既可以是url字符串,还可以是urllib.request.Request对象
import urllib.request
import urllib.parse
import json
# 请求的数据
param = urllib.parse.urlencode({
"id_type": 2,
"client_type": 2608,
"sort_type": 2,
"cursor": "0",
"limit": 2
})
param = param.encode("utf-8")
# 打开URL资源
re = urllib.request.urlopen("https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed?aid=2608&uuid=6977760184626628096",data=param)
# 按字节读取资源300字节
data = re.read()
# 将字节打印出来
print(json.dumps(data.decode("utf-8")))
- 使用urllib.request.Resquest方法
import urllib.request
import urllib.parse
import json
# 请求的数据
param = urllib.parse.urlencode({
"id_type": 2,
"client_type": 2608,
"sort_type": 2,
"cursor": "0",
"limit": 2
})
param = param.encode("utf-8")
url = "https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed?aid=2608&uuid=6977760184626628096"
# 打开URL资源
req = urllib.request.Request(url=url,data=param)
re = urllib.request.urlopen(req)
# 按字节读取资源300字节
data = re.read()
print(re.status)
print(re.reason)
# 将字节打印出来
print(json.dumps(data.decode("utf-8")))
4. 其他请求
我们可以直接使用urllib.request.Resquest(),method属性来指定需要传入的请求方法
param = "请求更新的数据"
url = "请求地址"
req = urllib.request.Request(url=url,data=param,method="PUT/DELETE/CONNECT")
- PUT请求:一般用于更新网站内容
- DELETE请求:一般用来删除指定资源,一般都会开放出来
总结
本期,我们对urllib.request对HTTP各种请求进行学习和实操。
以上是本期内容,欢迎大佬点赞评论,下期见~