python中requests模拟登录的三种方式(携带cookie/session进行请求网站)

  • Post category:Linux

我来讲解一下Python中requests模拟登录的三种方式。

携带cookie进行请求网站

1. 登录获取cookie

首先需要模拟登录获取cookie,一般情况下可以在浏览器中手动登录,然后通过开发者工具查看Network面板获取。

import requests

# 构建Session对象模拟登录获取cookie
s = requests.Session()
login_data = {
    'username': 'your_username',
    'password': 'your_password'
}
s.post('http://example.com/login/', data=login_data)

# 获取登录后的cookie
cookie = ''
for key, value in s.cookies.items():
    cookie += key + '=' + value + ';'
print('cookie:', cookie)

2. 使用cookie进行请求

获取到cookie之后,就可以使用requests发送带cookie的请求了。

import requests

cookie = 'example_cookie'
# 携带cookie进行请求
headers = {'cookie': cookie}
r = requests.get('http://example.com/xxx/', headers=headers)
print(r.text)

携带session进行请求网站

1. 登录获取session

需要构建一个Session对象,并发送登录请求获取session。

import requests

# 构建Session对象模拟登录获取session
s = requests.Session()
login_data = {
    'username': 'your_username',
    'password': 'your_password'
}
s.post('http://example.com/login/', data=login_data)

# 获取登录后的session
session = requests.utils.dict_from_cookiejar(s.cookies)['sessionid']
print('session:', session)

2. 使用session进行请求

获取到session之后,就可以使用requests发送使用session的请求了。

import requests

session = 'example_session'
# 携带session进行请求
headers = {'Cookie': f'sessionid={session}'}
r = requests.get('http://example.com/xxx/', headers=headers)
print(r.text)

使用requests模拟登录获取cookie并持久化

1. 登录获取cookie并保存

登录获取cookie之后,需要将cookie保存到本地文件中,方便下次使用。

import requests

# 构建Session对象模拟登录获取cookie
s = requests.Session()
login_data = {'username': 'your_username', 'password': 'your_password'}
s.post('http://example.com/login/', data=login_data)

# 获取登录后的cookie并保存
with open('cookie.txt', 'w') as f:
    for key, value in s.cookies.items():
        f.write(key + '=' + value + ';')

2. 使用cookie进行带持久化的请求

将保存在本地文件中的cookie读取出来,再加入到请求头中进行请求。

import requests

# 读取保存的cookie并进行带持久化的请求
cookie_path = './cookie.txt'
headers = {'cookie': ''}
with open(cookie_path, 'r') as f:
    cookie = f.read().strip()
    headers['cookie'] = cookie
r = requests.get('http://example.com/xxx/', headers=headers)
print(r.text)

希望这个示例可以帮到你。