建立登录 Twitter 的正确响应

问题描述 投票:0回答:1

我正在尝试仅使用请求登录到 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)
python web-scraping twitter python-requests
1个回答
0
投票

您当前使用请求登录 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、用户名和密码变量应在代码的前面定义。

© www.soinside.com 2019 - 2024. All rights reserved.