一、问题背景:
今天有客户发了一张图片,图片上的有段代码自己之前是没有见过的,然后问了下gpt正好总结一下。
没见过的代码:
下方是将cookie信息更新到session里面的代码。
# 将cookies添加到session中
session.cookies.update(cookies)
import requests
# 假设你已经有了一个包含cookies的列表,例如:
cookie_list = [
{'name': 'cookie1', 'value': 'value1'},
{'name': 'cookie2', 'domain': 'example.com', 'path': '/', 'value': 'value2'},
# ... 其他cookies
]
# 创建一个requests的Session对象
session = requests.Session()
def set_cookies(cookie_list, session):
# 将cookie列表转换为requests的cookies格式
cookies = {}
for cookie in cookie_list:
# 确保只添加必要的cookie属性
if 'name' in cookie and 'value' in cookie:
cookies[cookie['name']] = cookie['value']
# 将cookies添加到session中
session.cookies.update(cookies)
# 调用函数绑定cookies
set_cookies(cookie_list, session)
二、方法介绍
①:session.cookies.update():
#注意:
使用ss.cookies.update(cookies)函数方法将cookies信息添加到ss里面以后(第1行代码到第27行代码),
那么在第33行代码发送请求的时候,就不需要再去额外添加cookies参数了!!!
import requests
# 假设你已经有了一个包含cookies的列表,例如:
cookie_list = [
{'name': 'cookie1', 'value': 'value1'},
{'name': 'cookie2', 'domain': 'example.com', 'path': '/', 'value': 'value2'},
# ... 其他cookies
]
# 创建一个requests的Session对象
ss = requests.session()
def set_cookies(cookie_list, session):
# 将cookie列表转换为requests的cookies格式
cookies = {}
for cookie in cookie_list:
# 确保只添加必要的cookie属性
if 'name' in cookie and 'value' in cookie:
cookies[cookie['name']] = cookie['value']
# 将cookies添加到session中
ss.cookies.update(cookies)
# 调用函数绑定cookies
set_cookies(cookie_list, ss)
# 使用session发送请求
def send_request(url, session):
try:
response = ss.get(url)
# 检查请求是否成功
response.raise_for_status()
return response.text # 或者使用response.json()如果你期望JSON格式的响应
except requests.exceptions.HTTPError as errh:
print(f"Http Error: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"Error Connecting: {errc}")
except requests.exceptions.Timeout as errt:
print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
print(f"OOps: Something Else {err}")
# 要请求的URL
url = 'http://example.com/some_endpoint'
# 发送请求并打印响应内容
print(send_request(url, ss))
②:正常携带cookies参数:
如果不采用上边的那种方式,就正常在发送请求的时候,将cookie参数信息传递给cookies参数即可。
代码的第32行,cookies参数需要添加上去
import requests
# 假设你已经有了一个包含cookies的列表,例如:
cookie_list = [
{'name': 'cookie1', 'value': 'value1'},
{'name': 'cookie2', 'domain': 'example.com', 'path': '/', 'value': 'value2'},
# ... 其他cookies
]
# 创建一个requests的Session对象
ss = requests.session()
def set_cookies(cookie_list):
# 将cookie列表转换为requests的cookies格式
cookies = {}
for cookie in cookie_list:
# 确保只添加必要的cookie属性
if 'name' in cookie and 'value' in cookie:
cookies[cookie['name']] = cookie['value']
return cookies
# 调用函数绑定cookies
cookie = set_cookies(cookie_list)
# 使用session发送请求
def send_request(url, ss):
try:
response = ss.request(method='GET', url=url, cookies=cookie)
# 检查请求是否成功
response.raise_for_status()
return response.text # 或者使用response.json()如果你期望JSON格式的响应
except requests.exceptions.HTTPError as errh:
print(f"Http Error: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"Error Connecting: {errc}")
except requests.exceptions.Timeout as errt:
print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
print(f"OOps: Something Else {err}")
# 要请求的URL
url = 'http://example.com/some_endpoint'
# 发送请求并打印响应内容
print(send_request(url, ss))
③:两种方式比较:
- 在请求最开始时更新Session的cookies:
-
- 这种方式是在程序开始时或在第一次发送请求之前,将cookies信息添加到
session
对象中。 - 一旦cookies被添加到
session
对象,它们将自动被用于该session
发送的所有后续请求。 - 这意味着在后续请求中,您通常不需要再次指定
cookies
参数,除非您需要为特定请求覆盖或添加新的cookies。
- 这种方式是在程序开始时或在第一次发送请求之前,将cookies信息添加到
- 在发送请求时使用
cookies
参数:
-
- 这种方式是在每次发送请求时,通过
cookies
参数手动指定所需的cookies。 - 这样做的好处是您可以精确控制每个请求所使用的cookies,而不会影响
session
对象中存储的cookies。 - 这种方法提供了更大的灵活性,但可能需要在每个请求中重复编写代码以传递cookies。
- 这种方式是在每次发送请求时,通过
- 以下是两种方式的示例和说明:
①:第一种方式:在程序开始时更新Session的cookies
# 创建Session对象
session = requests.Session()
# 添加cookies到session
session.cookies.update({'cookie1': 'value1', 'cookie2': 'value2'})
# 后续请求自动携带cookies
response = session.get('https://example.com')
在这个示例中,一旦cookies被添加到 session
,后续使用该 session
发送的所有请求都将自动携带这些cookies。
②: 第二种方式:在发送请求时使用 cookies 参数
# 创建Session对象
session = requests.Session()
# 发送请求时手动指定cookies
response = session.get('https://example.com', cookies={'cookie1': 'value1'})
在这个示例中,每次发送请求时都需要手动指定 cookies
参数。这种方法不会更新 session
中存储的cookies,因此每次请求都是独立的。
④:总结:
- 第一种方式适用于需要在多个请求之间保持会话状态的场景,例如登录后的操作。
- 第二种方式适用于需要对每个请求精确控制cookies的场景,例如测试不同用户或会话。
在实际使用中,选择哪种方式取决于您的具体需求和偏好。如果您希望简化代码并减少重复,第一种方式可能更合适。如果您需要对每个请求的cookies进行精细控制,第二种方式可能更合适。