【影刀RPA】session方式发送请求——携带cookie信息的两种方式介绍

一、问题背景:

今天有客户发了一张图片,图片上的有段代码自己之前是没有见过的,然后问了下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))

③:两种方式比较:

  1. 在请求最开始时更新Session的cookies:
    • 这种方式是在程序开始时或在第一次发送请求之前,将cookies信息添加到 session 对象中。
    • 一旦cookies被添加到 session 对象,它们将自动被用于该 session 发送的所有后续请求。
    • 这意味着在后续请求中,您通常不需要再次指定 cookies 参数,除非您需要为特定请求覆盖或添加新的cookies。

  1. 在发送请求时使用 cookies 参数:
    • 这种方式是在每次发送请求时,通过 cookies 参数手动指定所需的cookies。
    • 这样做的好处是您可以精确控制每个请求所使用的cookies,而不会影响 session 对象中存储的cookies。
    • 这种方法提供了更大的灵活性,但可能需要在每个请求中重复编写代码以传递cookies。
  1. 以下是两种方式的示例和说明:

①:第一种方式:在程序开始时更新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进行精细控制,第二种方式可能更合适。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值