You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests库构建Twitter登录请求的问题排查与流程咨询

Twitter登录请求构建问题排查与正确实现流程

问题描述

我尝试仅用requests库实现Twitter登录,但怀疑当前登录请求的构建有问题。我已经传入了guest token,但不确定是不是漏了其他参数、用的URL是否正确,以及问题到底出在哪。当前请求返回200状态码,但我能确定并没有成功登录,想请教正确的请求流程构建方式。

现有代码

import requests

headers = {
    'accept': '*/*',
    'authorization': public_bearer,
    'content-type': 'application/json',
    'referer': 'https://twitter.com/',
    'user-agent': user_agent,
    'x-guest-token': guest_token
}

data = {
    'username': username,
    'password': password
}

r = requests.post('https://twitter.com/login', headers=headers, data=data)
print(r.status_code)
print(r.headers)

问题分析

你的代码存在几个关键问题,导致登录失败:

  • 接口URL错误:https://twitter.com/login是前端登录页面的地址,实际处理登录请求的是API接口,而非这个页面地址。
  • 请求参数缺失:仅传入用户名和密码不够,还需要csrf_token(从会话cookie中提取的ct0值),这个是Twitter防跨站请求伪造的必要参数。
  • 请求格式不匹配:你设置了content-type: application/json,但使用data参数发送表单格式数据,两者不匹配;Twitter登录API通常接受application/x-www-form-urlencoded格式的表单数据。
  • 会话未维护:没有使用requests.Session()来自动管理cookie,guest token、csrf token和后续的登录会话都是绑定的,单次请求无法维持状态。

正确的登录流程实现

步骤1:初始化会话,获取csrf token和guest token

需要先建立会话,访问Twitter首页获取csrf token,再请求激活guest token。

步骤2:构建登录请求

使用正确的API端点,补充必要参数和头信息,通过会话发送请求。

步骤3:验证登录状态

检查响应内容或会话cookie中的auth_token判断是否登录成功。

修正后的代码示例

import requests

# 初始化会话,自动维护cookie
session = requests.Session()
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
session.headers.update({'User-Agent': user_agent})

# 1. 获取csrf token(从首页cookie中提取ct0)
home_res = session.get('https://twitter.com')
csrf_token = session.cookies.get('ct0')

# 2. 获取guest token
public_bearer = "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA"
guest_res = session.post(
    'https://api.twitter.com/1.1/guest/activate.json',
    headers={'Authorization': public_bearer}
)
guest_token = guest_res.json().get('guest_token')

# 3. 构建登录请求
login_url = 'https://twitter.com/i/api/1.1/account/login.json'
login_headers = {
    'accept': '*/*',
    'authorization': public_bearer,
    'content-type': 'application/x-www-form-urlencoded',
    'referer': 'https://twitter.com/',
    'x-csrf-token': csrf_token,
    'x-guest-token': guest_token,
    'User-Agent': user_agent
}

login_data = {
    'username': '你的用户名',
    'password': '你的密码',
    'remember_me': 'true'
}

# 发送登录请求
login_res = session.post(login_url, headers=login_headers, data=login_data)

# 验证登录结果
print("状态码:", login_res.status_code)
print("响应内容:", login_res.json())
# 检查是否存在登录会话标识auth_token
print("登录会话token:", session.cookies.get('auth_token'))

注意事项

  • Bearer Token:代码中使用的是Twitter公开的通用Bearer Token,若后续失效,可通过抓包Twitter首页请求获取最新值。
  • 风控验证:若账号开启2FA或触发风控,登录请求会返回验证码要求,需额外处理验证码输入流程。
  • API变更:Twitter的接口规则可能随时调整,若上述接口失效,可通过浏览器抓包工具查看最新的登录请求端点和参数。

内容的提问来源于stack exchange,提问作者hwhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:23:25