requests库-基础使用

1. requests 模块简介

requests 是一个基于 Python 的第三方库,主要用于发送 HTTP 请求,特点如下:

  • 易用性:简单的 API,降低了 HTTP 操作的复杂性。
  • 灵活性:支持多种请求方法(GET、POST、PUT、DELETE 等)。
  • 扩展性:支持自定义请求头、Cookies、代理等。

安装方式:

1
pip install requests

2. 如何发送 GET 和 POST 请求

发送 GET 请求

GET 请求用于从服务器获取数据,示例如下:

1
2
3
4
5
6
import requests

url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.get(url)
print(response.status_code) # 输出状态码
print(response.json()) # 输出 JSON 格式的响应体

通过parms传递查询参数:

1
2
3
params = {'userId': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.url) # 查看最终请求的 URL

发送 POST 请求

POST 请求用于向服务器提交数据:

1
2
3
4
5
6
7
8
9
url = 'https://jsonplaceholder.typicode.com/posts'
data = {
"title": "foo",
"body": "bar",
"userId": 1
}
response = requests.post(url, json=data) # 发送 JSON 数据
print(response.status_code)
print(response.json())

3. 其他请求方法

PUT 请求

用于更新资源:

1
2
3
4
url = 'https://jsonplaceholder.typicode.com/posts/1'
data = {"title": "updated title"}
response = requests.put(url, json=data)
print(response.json())

DELETE 请求

用于删除资源:

1
2
3
url = 'https://jsonplaceholder.typicode.com/posts/1'
response = requests.delete(url)
print(response.status_code) # 204 表示删除成功

4. 自定义 Header 和 Cookies

自定义 Header

通过 headers 参数自定义请求头:

1
2
3
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://example.com', headers=headers)
print(response.request.headers) # 查看最终请求头

自定义 Cookies

通过 cookies 参数设置自定义 Cookie:

1
2
3
cookies = {'session_id': '123456'}
response = requests.get('https://example.com', cookies=cookies)
print(response.request.headers.get('Cookie'))

5. SSL 证书验证

默认情况下,requests 会验证 HTTPS 请求的 SSL 证书。

禁用 SSL 验证

如果服务器证书不可信,可以关闭验证(不推荐):

1
2
response = requests.get('https://self-signed.badssl.com/', verify=False)
print(response.status_code)

使用自定义证书

指定本地证书文件路径:

1
response = requests.get('https://example.com', cert=('/path/to/cert.pem', '/path/to/key.pem'))

6. 处理返回结果

检查状态码

1
2
3
4
5
response = requests.get('https://example.com')
if response.status_code == 200:
print('请求成功')
else:
print(f'请求失败,状态码:{response.status_code}')

解析响应内容

  • 响应文本
    1
    print(response.text)  # 返回响应的文本内容
  • JSON 数据
    1
    print(response.json())  # 解析为字典或列表

响应头信息

1
print(response.headers)  # 以字典形式返回响应头