我正在尝试仅使用请求登录到 Twitter,但我不认为我正在构建正确的登录响应。我传递了访客令牌,但我还遗漏了什么吗?我使用的 URL 是否正确?我究竟做错了什么?还有我如何判断我是否以这种方式成功登录——在我当前的迭代中,我得到了一个 200 状态代码,但我 100% 确定它不是我成功登录的。
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)
您当前使用请求登录 Twitter 的实现存在一些问题。
首先,您用于登录请求的 URL 不正确。您应该用于登录 Twitter 的 URL 是
https://twitter.com/sessions
.
其次,您在登录请求中发送的数据格式不正确。 Twitter 的登录 API 期望登录凭据以表单数据的形式发送,而不是 JSON 数据。您可以使用 urllib.parse 模块中的 urlencode() 方法将登录数据转换为表单数据。
最后,要验证您是否已成功登录,您应该检查响应是否设置了任何 cookie。当用户成功登录时,Twitter 会设置一个名为 auth_token 的 cookie,因此您可以检查响应中是否存在此 cookie 以验证您是否已成功登录。
这是您应该可以使用的代码的更新版本:
import requests
from urllib.parse import urlencode
headers = {
'accept': '*/*',
'authorization': public_bearer,
'content-type': 'application/x-www-form-urlencoded',
'referer': 'https://twitter.com/',
'user-agent': user_agent,
'x-guest-token': guest_token
}
data = {
'session[username_or_email]': username,
'session[password]': password,
'remember_me': '1',
'return_to_ssl': 'true',
'scribe_log': '',
'redirect_after_login': '/',
'authenticity_token': ''
}
data = urlencode(data)
r = requests.post('https://twitter.com/sessions', headers=headers, data=data)
print(r.status_code)
print(r.headers)
# Check if the auth_token cookie is set to verify successful login
if 'auth_token' in r.cookies:
print("Successfully logged in!")
else:
print("Failed to log in")
请注意,public_bearer、user_agent、guest_token、用户名和密码变量应在代码的前面定义。