从0开始python学习-39.requsts库

目录

HTTP协议

[1. 请求](#1. 请求)

[2. 响应](#2. 响应)

Requests库

[1. 安装](#1. 安装)

[2. 请求方式](#2. 请求方式)

[2.1 requests.请求方式(参数)](#2.1 requests.请求方式(参数))

[2.2 requests.request()](#2.2 requests.request())

[2.3 requests.session().request()](#2.3 requests.session().request())

[2.4 三种方式之间的关联](#2.4 三种方式之间的关联)

[3. 请求参数](#3. 请求参数)

[3.1 params:查询字符串参数](#3.1 params:查询字符串参数)

[3.2 data:Form表单参数](#3.2 data:Form表单参数)

[3.3 json:json参数](#3.3 json:json参数)

[3.4 files:文件参数](#3.4 files:文件参数)

[4. 响应内容](#4. 响应内容)


HTTP协议

1. 请求

1.1 请求行:请求方式,请求路径,协议

1.2 请求头

  • Content-Type:客户端发送的数据格式
  • application/x-www-form-urlencoded:表单格式
  • application/json:json数据
  • multipart/form-data:文件上传
  • application/octrent-stream:二进制文件上传
  • Accept:接收的数据格式
  • X-Requested-with:异步请求
  • User-Agent:客户端类型
  • Cookie:Cookie信息

1.3 请求正文; 请求数据,字节流

2. 响应

2.1 响应行:状态码,状态信息

2.2 常见状态码:

  • 200 请求成功

  • 201 创建成功

  • 204 没有内容可响应

  • 301 永久重定向

  • 302 临时重定向

  • 401 没有提高身份信息

  • 403 权限不足

  • 404 资源不存在

  • 405 请求方法不允许

  • 429 请求太频繁

  • 500 本地服务器挂了

  • 502 远程服务器挂了

2.3 响应头--示例:Content-Type: image/png

2.4 响应数据:字节流

Requests库

1. 安装

pip install requests

2. 请求方式

2.1 requests.请求方式(参数)

这里请求方式常用的基本上就是get,post,delete,put这几种,其中最常用的就是get和post

python 复制代码
requests.get(url, params=None, **kwarg)
requests.post(url, data=None, json=None, **kwargs)
requests.delete(url, **kwarg)
requests.put(url, data=None, **kwargs)

2.2 requests.request()

python 复制代码
requests.request(method, url, **kwargs)

从原码可以看到method其实就是2.1中的那几种请求方式

查看2.1中请求方式原码可以看到,2.1方法调用的底层代码其实就是2.2的方法

2.3 requests.session().request()

通过session的方式调用,可以够自动的处理有cookie关联的接口,当有cookie需要关联是建议使用这种请求方式

python 复制代码
requests.session().request(self,
        method,                  # 请求方式
        url,                     # 请求路径
        params=None,             # params参数:查询字符串参数,在接口路径后面以?传递的参数,多个参数之间用&分隔
        data=None,               # 表单参数:Content-Type:application/x-www-form-urlencoded
        headers=None,            # 请求头
        cookies=None,            # cookies
        files=None,              # 文件参数:Content-Type:multipart/form-data
        auth=None,               # 鉴权
        timeout=None,            # 超时
        allow_redirects=True,    # 是否重定向,True-是
        proxies=None,            # 代理设置
        hooks=None,              # 钩子:用来控制部分请求过程,或信号事件处理
        stream=None,             # 文件下载:用于控制是否立即下载响应体,默认情况下是stream=Ffalse
        verify=None,             # 证书
        cert=None,               # ca证书
        json=None,               # json参数:Content-Type:application/json
        )
  1. 在请求行传递参数: method、url、params

  2. 在请求头传递参数:headers、cookies

  3. 在请求正文传递参数:data、files、json

(1). json和其他会冲突

(2). 单独传的情况:

  • data会进行编码 : content-type: application/x-www-form-urlencoded

  • files会增加分隔符 content-type: multipart/form-data;boundary=6d0c340d943891526bd14fab465025bb

  • josn格式直接传: content-type: application/json

  • data传递的不是字典时,没有 content-type

  1. 设置请求接口时的传输细节:auth、timeout、allow_redirects、proxies、verify

2.4 三种方式之间的关联

python 复制代码
requests.get -> requests.request("GET") -> Session().request("get") 
requests.post -> requests.request("post") -> Session().request("post") 

3. 请求参数

3.1 params:查询字符串参数

python 复制代码
params = {"name":"ces","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,params=params)
  • params参数在接口路径后面以?传递的参数,多个参数之间用&分隔
  • 对参数内容进行了urlencode编码(内容以ASCII的方式呈现)

3.2 data:Form表单参数

python 复制代码
data = {"name":"张三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,data=data)
  • 自动添加了一个请求头:Content-Type: application/x-www-form-urlencoded
  • 对参数内容进行了urlencode编码

3.3 json:json参数

python 复制代码
json = {"name":"张三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,json=json)
  • 添加请求头:Content-Type: application/json
  • 对参数进行:Unicode编码

3.4 files:文件参数

上传已存在的文件

python 复制代码
url = 'http://192.168.1.1:8088/list'
file = {"uploads":open("D:/work/test.txt")}
requests.get(url=url, files=file)
  • 添加请求头:Content-Type: multipart/form-data
  • 构建了一个表单参数,把文件的内容以二进制的方式加到body里面

上传不存在的文件

python 复制代码
url = 'http://192.168.1.1:8088/list'
file = {"uploads":("test1.txt","test11111","text/plain")}
requests.get(url=url, files=file)

这里如果不知道上传的文件的Content-Type是啥可以直接进行百度然后找到对应的即可

上传多个文件

python 复制代码
url = 'http://192.168.1.1:8088/list'
file = {
        "uploads1":open("D:/work/test.txt"),
        "uploads2":("test1.txt", "test11111", "text/plain")
        }
requests.get(url=url, files=file)

注意这里name不能重复了

同时传递表单参数和文件参数---此时表单不会进行urlencode编码

python 复制代码
url = 'http://192.168.1.1:8088/list'
file = {
        "uploads1":open("D:/work/test.txt"),
        }
data = {"name":"张三","age":18}
requests.get(url=url, data=data, files=file)

因为文件上传方式会自动添加请求头:Content-Type: multipart/form-data,所以可以和表单一起同时传递

4. 响应内容

python 复制代码
print(res.text)            # 返回字符串类型的数据
print(res.content)         # 返回二进制类型的数据
res.json()                 # 把json字符串转化为字典格式返回
print(res.status_code)     # 状态码
print(res.reason)          # 状态信息
print(res.cookies)         # cookie信息
print(res.encoding)        # 编码格式
print(res.headers)         # 响应头
print(res.elapsed)         # 耗时
print(res.request.method)  # 请求方式
print(res.request.url)     # 请求路径
print(res.request.headers) # 请求头
print(res.request.body)    # 请求数据
相关推荐
无须logic ᭄3 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
百流16 分钟前
scala文件编译相关理解
开发语言·学习·scala
Channing Lewis16 分钟前
flask常见问答题
后端·python·flask
Channing Lewis18 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月1 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
Evand J1 小时前
matlab绘图——彩色螺旋图
开发语言·matlab·信息可视化
我想学LINUX2 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
深度混淆2 小时前
C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
开发语言·c#
雁于飞2 小时前
c语言贪吃蛇(极简版,基本能玩)
c语言·开发语言·笔记·学习·其他·课程设计·大作业