一文掌握requests模块

目录

一、安装 requests

二、基础用法

1、发送 GET 请求

2、发送 POST 请求

三、常见的 HTTP 方法

1、 PUT 

2、DELETE

3、HEAD

4、OPTIONS

5、TRACE

6、PATCH

四、处理响应

1、获取状态码

2、获取响应头

3、获取响应体

4、修改响应体编码

        1)apparent_encoding

        2)手动指定编码方式

五、错误处理

六、高级用法

1、自定义请求头

2、使用 cookies

3、超时设置

4、会话管理

5、文件上传

6、流式下载

7、身份验证

        1)HTTP Basic Auth

        2)OAuth 2.0

        3)md5签名验证

        4)生成签名(sign)后对其进行Base64编码

        5)自定义签名Authorization进行身份验证

8、SSL/TLS 验证

9、使用代理

10、自定义适配器

11、检查适配器有没有生效

        1)检查 Session 对象的适配器:

        2) 检查 HTTPAdapter 的属性:

        3) 模拟请求并检查日志:

        4) 下面是结合上述方法的一个完整示例:

12、使用环境变量

        1) mac和linux使用expor配置环境变量

        2)windows使用set


requests 是一个非常流行的第三方库,它简化了 HTTP 请求的处理过程。

一、安装 requests

如果还没有安装 requests 库,可以通过 pip 命令来安装:

pip install requests

二、基础用法

1、发送 GET 请求

最简单的请求类型是 GET 请求,用于从服务器获取信息。requests 向网站发送 GET 请求并打印响应的内容:

import requests

response = requests.get('https://httpbin.org/get')
print(response.text)

2、发送 POST 请求

POST 请求通常用于向服务器提交数据。使用 requests 发送 带有 JSON 数据的 POST 请求:

import requests
import json

data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}

response = requests.post('https://httpbin.org/post', data=json.dumps(data), headers=headers)
print(response.text)

三、常见的 HTTP 方法

除了 GET 和 POST,requests 还支持其他常见的 HTTP 方法:

  • PUT:更新资源。
  • DELETE:删除资源。
  • HEAD:获取资源头部信息。
  • OPTIONS:获取资源的通信选项。
  • TRACE: 用于诊断目的,让客户端能够检测中间件(如代理服务器)是否在转发请求时改变了请求或响应的内容。
  • PATCH: 用于部分更新资源。与 PUT 方法不同,PUT 方法通常用于完全替换一个资源,而 PATCH 方法则允许客户端发送增量更新,即只更新资源的部分内容,而不是替换整个资源。

这些方法的使用方式与 GET 和 POST 类似。

1、 PUT 

import requests
import json

url = 'https://httpbin.org/put'

# 定义要发送的数据
data = {'key': 'value'}

# 将数据转换为 JSON 格式
json_data = json.dumps(data)

headers = {'Content-Type': 'application/json'}

response = requests.put(url, data=json_data, headers=headers)

# 检查响应状态码
if response.status_code == 200:
    print("PUT 请求成功!")
    # 输出响应内容
    print("响应内容:")
    print(response.json())
else:
    print(f"请求失败,状态码:{response.status_code}")

2、DELETE

import requests

url = 'https://httpbin.org/delete'

response = requests.delete(url)

# 检查响应状态码
if response.status_code == 200:
    print("DELETE 请求成功!")
    # 输出响应内容
    print("响应内容:")
    print(response.text)
else:
    print(f"请求失败,状态码:{response.status_code}")

3、HEAD

import requests

url = 'https://httpbin.org/get'

response = requests.head(url)

# 检查响应状态码
if response.status_code == 200:
    print("HEAD 请求成功!")
    # 输出响应头信息
    print("响应头信息:")
    print(response.headers)
else:
    print(f"请求失败,状态码:{response.status_code}")

4、OPTIONS

import requests

url = 'https://httpbin.org/anything'

response = requests.options(url)

# 检查响应状态码
if response.status_code == 200:
    print("OPTIONS 请求成功!")
    # 输出响应头信息
    print("响应头信息:")
    print(response.headers)
else:
    print(f"请求失败,状态码:{response.status_code}")

5、TRACE

import requests

url = 'https://httpbin.org/anything'

response = requests.request('TRACE', url)

# 检查响应状态码
if response.status_code == 200:
    print("TRACE 请求成功!")
    # 输出响应内容
    print("响应内容:")
    print(response.text)
else:
    print(f"请求失败,状态码:{response.status_code}")

6、PATCH

import requests
import json

url = 'https://httpbin.org/patch'

# 定义要发送的数据
data = {'key': 'value'}

# 将数据转换为 JSON 格式
json_data = json.dumps(data)

headers = {'Content-Type': 'application/json'}

response = requests.patch(url, data=json_data, headers=headers)

# 检查响应状态码
if response.status_code == 200:
    print("PATCH 请求成功!")
    # 输出响应内容
    print("响应内容:")
    print(response.json())
else:
    print(f"请求失败,状态码:{response.status_code}")

四、处理响应

当发送请求后,requests 会返回一个 Response 对象。这个对象包含了许多有用的信息,如状态码、响应头、响应体等。

1、获取状态码

状态码用来表示请求的结果。例如,200 表示成功,404 表示找不到资源。

import requests

response = requests.get('https://httpbin.org/get')
print(response.status_code)

2、获取响应头

响应头包含了关于响应的元数据,例如 Content-Type。

import requests

response = requests.get('https://httpbin.org/get')
print(response.headers)
print(response.headers.get('Content-Type'))

3、获取响应体

响应体是服务器返回的实际数据。

import requests

response = requests.get('https://httpbin.org/get')
print(response.text)  # 获取文本格式的数据
print(response.json())  # 如果响应是 JSON 格式,可以直接转换为 Python 字典
print(response.content)  # 原始字节流,处理二进制数据,适用于下载文件、图片或二进制数据。处理非文本数据时,如音频、视频文件等。

4、修改响应体编码

获取文本数据时,响应体的编码不正确,通过encoding修改编码

        1)apparent_encoding

apparent_encoding是基于内容猜测的,不一定总是准确。

import requests

# 发送请求
response = requests.get('https://httpbin.org/get')
# 检查原始编码
print("Original encoding:", response.encoding)
# 如果响应的编码不是UTF-8,尝试使用apparent_encoding
if response.encoding != 'utf-8':
    response.encoding = response.apparent_encoding
# 现在尝试解析内容
try:
    # 使用正确的编码来解码内容
    content = response.content.decode(response.encoding)
    # 进行处理,比如解析text
    print(content)
except UnicodeDecodeError:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值