一、requests介绍
requests模块是一个用于发送HTTP请求的第三方库,其设计初衷是简化HTTP请求的发送和处理。
与Python标准库中的urllib相比,requests提供了更直观和便捷的API,使开发者能够快速编写功能强大的HTTP客户端
1.1安装
1 pip install requests
1.2导入模块
1 import requests
二、发送HTTP请求
requests模块支持多种类型的HTTP请求,包括GET、POST、PUT、DELETE等。下面将逐一介绍这些请求的用法。
get(url, **kwargs)
: 发送一个GET请求。post(url, data=None, **kwargs)
: 发送一个POST请求,data
可以是字典、字节或文件对象。put(url, data=None, **kwargs)
: 发送一个PUT请求。delete(url, **kwargs)
: 发送一个DELETE请求。head(url, **kwargs)
: 发送一个HEAD请求,只获取页面的HTTP头信息。options(url, **kwargs)
: 发送一个OPTIONS请求,获取服务器支持的HTTP方法。patch(url, data=None, **kwargs)
: 发送一个PATCH请求。
官网链接:http://docs.python-requests.org/en/master/
2.1 GET请求
GET请求用于从服务器获取数据。requests.get方法可以发送一个GET请求,并返回一个响应对象。
(1.)没有请求体
(2.)数据必须在1k之内
(3)get请求数据会暴露在浏览器的地址栏中
在这个示例中,我向博客园发送了一个GET请求,并打印了响应的状态码和响应内容 。
2.2 POST请求
POST请求用于向服务器提交数据。requests.post方法可以发送一个POST请求,并返回一个响应对象。
(1)数据不会出现在地址栏中 (2)数据的大小没有上限 (3)有请求体 (4)请求体中如果存在中文,会使用URL编码!
requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据
1 import requests 2 import json 3 4 headers = {'Content-Type': 'application/json'} 5 data = { 6 "key1": "value1", 7 "key2": "value2" 8 } 9 json_data = json.dumps(data) 10 response_json = requests.post('https://www.cnblogs.com/', data=json_data,headers=headers) 11 12 print(response_json.status_code) 13 print(response_json.text)
2.3 PUT请求
PUT请求用于更新服务器上的资源。requests.put方法可以发送一个PUT请求,并返回一个响应对象。
2.4 DELETE请求
DELETE请求用于删除服务器上的资源。requests.delete方法可以发送一个DELETE请求,并返回一个响应对象。
三、请求参数和头信息
在实际应用中,通常需要在请求中包含参数和头信息。requests模块提供了便捷的方式来添加这些信息。
3.1 URL参数
可以使用params参数向URL中添加查询参数。
3.2 请求头
可以使用headers参数添加自定义请求头。
四、响应处理
requests模块返回的响应对象包含丰富的信息和方法,方便我们处理HTTP响应。
# respone属性
print(respone.text)
print(respone.content)
print(respone.status_code)
print(respone.headers)
print(respone.cookies)
print(respone.cookies.get_dict())
print(respone.cookies.items())
print(respone.url)
print(respone.history)
print(respone.encoding)1
————————————————
4.1 状态码
可以通过响应对象的status_code属性获取HTTP状态码。
1 import requests 2 3 response = requests.get('https://www.cnblogs.com/') 4 5 print(response.status_code) 6 print(response.text) 7 print(response.content)
五、文件上传和下载
在实际应用中,常常需要上传和下载文件。requests模块提供了便捷的文件处理方法。
5.1 文件下载
可以使用files参数下载文件。
1 import requests 2 3 response = requests.get('https://www.example.com/image.jpg') 4 5 with open('image.jpg', 'wb') as file: 6 file.write(response.content)
六、处理Cookies
requests模块可以自动处理Cookies,并允许手动设置和获取Cookies。
6.1 自动处理Cookies
1 import requests 2 3 # 创建一个 Session 对象 4 session = requests.Session() 5 6 # 登录的目标 URL 7 # login_url = 'https://example.com/login' 8 login_url = 'https://www.cnblogs.com/' 9 10 # 登录所需的表单数据 11 login_data = { 12 'username': 'jh', 13 'password': '123', 14 } 15 16 # 发送 POST 请求进行登录 17 response = session.post(login_url, data=login_data) 18 19 print("登录响应状态码:", response.status_code) 20 21 if response.ok: 22 print("登录成功!") 23 24 # 登录后访问另一个需要身份验证的页面 25 protected_url = 'https://example.com/protected' 26 protected_response = session.get(protected_url) 27 28 if protected_response.ok: 29 print("访问受保护页面成功!") 30 print(protected_response.text) # 打印受保护页面的内容 31 else: 32 print("访问受保护页面失败,状态码:", protected_response.status_code) 33 else: 34 print("登录失败,状态码:", response.status_code)