Python 网络开发基础之Requests

使用Python开发网络相关程序,可以使用自带的urllib3。requests是第三方库,但功能覆盖全且使用简单,因此,绝大多数场景,使用requests就好。

requests本质上只实现了一个方法——request,requests.get()相当于request(method='get'),其他方法类似。

1.实现方法

requests实现的方法
方法说明
get请求资源
head请求头部资源
post向url指定的资源后附加资源
put覆盖原资源
patch修改局部资源
delete删除资源
options预请求(正式请求前试探性请求)

requests实现的这些方法并不是开发者冥想得来的,而是基于HTTP协议。这里需要补充一个概念——url,全称Uniform Resource Locator,翻译过来就是统一资源定位,如www.vedio.com/ooxx.mp4。我觉得理解这个url就可以对比你本地存放的任意文件的路径,如D:/视频/ooxx.mp4。都是资源查找路径,只不过一个在本地一个在互联网上。

那么对于一个本地资源,我们可以对其进行查看、修改、删除等操作,对一个网络资源,我们同样可以有这些操作。因此有了上面表格列出的这些方法。

# 这个就相当于你打开浏览器,输入百度的地址
from requests import request

res = request(method='get', url='https://www.baidu.com')
print(res.status_code)

# 输出
200

实际上,有些网站或接口的开发者,为了让使用者更方便,并没有完全遵循这样的协议。即get方法除了可以实现请求资源,也可以实现修改、删除。那他是怎么通过一个get方法实现实现其他不同的请求的呢?有一种方法就是将真正的请求放在url里。如,我要使用get方法删除一个资源:requests.get('www.vedio.com/ooxx.mp4/delete'),新增、修改等操作也是类似。

2.超参数

要完成一次有效的网络请求,少不了提供一些参数。比如,上面请求百度网站,因为没有提供搜索关键词,因此没有返回什么实质内容。requests方法提供的超参数如下

requests常用请求超参数
参数名说明
params字典、包含字节或元组的列表,查询参数
data字典、列表、字节,要发送的数据,在body里
json序列化后的对象,在body里
header请求头
cookies认证许可
files字典或元组,要传递的文件
timeout等待超时
proxies代理

(1)示例1,通过接口修改线上表单指定字段的值

from requests import request
import json

headers = {
        # 认证
        'Authorization': "Token nJCQ0oj5jinK1huS3G",
        # 传文件时,不指定这个参数
        'Content-Type': "application/json",
        'charset': 'utf8',
        'User-Agent': "PostmanRuntime/7.20.1",
        # 接受的文档类型
        'Accept': "*/*",
        # 缓存控制
        'Cache-Control': "no-cache",
        # 访问的主机
        'Host': "api.xx.com",
        'Accept-Encoding': "gzip, deflate",
        'Content-Length': "246",
        'Connection': "keep-alive",
    }
# 这个格式就是将实际操作包含在url里
url = 'htttps://api.xx.com/table/001/update'
data = {
        "data_id": '123456abcd',
        # 把指定的某条数据的name值改成张三
        "data": {
            "_name": {"value": '张三'}
        }
response = request("POST", url, headers=headers, data=json.dumps(data))

(2)示例2,上传一个文件

data = {
            'file_token': 'xxoo'
        }
url = "https://upload.xx.com"
f_name = 'ooxx.mp4'
f_dir = 'D:/视频/ooxx.mp4'
# 文件类型
tp = 'mp4'
files = [('file', (f_name, open(f_dir, 'rb'), tp))]
response = request("POST", url, data=data, files=files)

3.响应

发起一个请求后,不管请求是否成功(除非遇到连接错误),都会返回一些信息。通过返回的信息我们可以进一步提取数据或者找到请求失败的原因。

常见网络请求返回状态
状态码含义
200请求成功
201更新成功
204删除成功
301,302重定向
400请求参数错误
401未授权
403禁止访问
404没有相关资源
500服务器错误

通过response.status_code即可获知请求是否成功,如果想要进一步获取响应信息,可通过以下字段:

常用响应内容字段
字段含义 
r.status_code状态码
r.text请求页面的内容
r.encodinghearder中定义的编码方式,默认ISO-8859-1
r.apparent_encoding根据实际内容分析出来的编码方式
r.request_url实际请求的url(有可能被重定向)
r.content内容的二进制行式
res = request("get", 'https://www.baidu.com',
              data={'wd': 'python'})
if res.status_code != 200:
    print('请求失败,错误码是{}'.format(res.status_code))
else:
    print('请求成功,返回信息是{}'.format(res.text))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值