fix httpx cookie issues, conflicting csrf tokens
This commit is contained in:
2
setup.py
2
setup.py
@@ -14,7 +14,7 @@ install_requires = [
|
||||
|
||||
setup(
|
||||
name="twitter-api-client",
|
||||
version="0.9.8",
|
||||
version="0.9.9",
|
||||
python_requires=">=3.10.10",
|
||||
description="Twitter API",
|
||||
long_description=dedent('''
|
||||
|
||||
@@ -615,10 +615,13 @@ class Account:
|
||||
|
||||
# validate credentials
|
||||
if all((email, username, password)):
|
||||
return login(email, username, password, **kwargs)
|
||||
session = login(email, username, password, **kwargs)
|
||||
session._init_with_cookies = False
|
||||
return session
|
||||
|
||||
# invalid credentials, try validating session
|
||||
if session and all(session.cookies.get(c) for c in {'ct0', 'auth_token'}):
|
||||
session._init_with_cookies = True
|
||||
return session
|
||||
|
||||
# invalid credentials and session
|
||||
@@ -627,12 +630,14 @@ class Account:
|
||||
# try validating cookies dict
|
||||
if isinstance(cookies, dict) and all(cookies.get(c) for c in {'ct0', 'auth_token'}):
|
||||
_session = Client(cookies=cookies, follow_redirects=True)
|
||||
_session._init_with_cookies = True
|
||||
_session.headers.update(get_headers(_session))
|
||||
return _session
|
||||
|
||||
# try validating cookies from file
|
||||
if isinstance(cookies, str):
|
||||
_session = Client(cookies=orjson.loads(Path(cookies).read_bytes()), follow_redirects=True)
|
||||
_session._init_with_cookies = True
|
||||
_session.headers.update(get_headers(_session))
|
||||
return _session
|
||||
|
||||
|
||||
@@ -109,7 +109,12 @@ def get_headers(session, **kwargs) -> dict:
|
||||
Get the headers required for authenticated requests
|
||||
"""
|
||||
cookies = session.cookies
|
||||
cookies.delete('ct0', domain='.twitter.com')
|
||||
# todo httpx cookie issues
|
||||
try:
|
||||
if session._init_with_cookies:
|
||||
cookies.delete('ct0', domain='.twitter.com')
|
||||
except:
|
||||
...
|
||||
headers = kwargs | {
|
||||
'authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs=1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
|
||||
'cookie': '; '.join(f'{k}={v}' for k, v in cookies.items()),
|
||||
@@ -124,6 +129,38 @@ def get_headers(session, **kwargs) -> dict:
|
||||
return dict(sorted({k.lower(): v for k, v in headers.items()}.items()))
|
||||
|
||||
|
||||
# def get_headers(session, **kwargs) -> dict:
|
||||
# """
|
||||
# Get the headers required for authenticated requests
|
||||
# """
|
||||
# cookies = {}
|
||||
# for k in {'auth_token', 'ct0', 'flow_token', 'guest_id', 'guest_id_ads', 'guest_id_marketing', 'guest_token', 'kdt',
|
||||
# 'personalization_id', 'twid'}:
|
||||
# cookies[k] = session.cookies.get(k, domain=None) or session.cookies.get(k, domain='.twitter.com')
|
||||
# #
|
||||
# # if cookies.get('ct0', domain=None):
|
||||
# # cookies.delete('ct0', domain='.twitter.com')
|
||||
# # elif cookies.get('ct0', domain='.twitter.com'):
|
||||
# # cookies.delete('ct0', domain=None)
|
||||
#
|
||||
# session.cookies.clear_session_cookies()
|
||||
#
|
||||
# session.cookies.update(cookies)
|
||||
#
|
||||
# headers = kwargs | {
|
||||
# 'authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs=1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
|
||||
# 'cookie': '; '.join(f'{k}={v}' for k, v in cookies.items()),
|
||||
# 'referer': 'https://twitter.com/',
|
||||
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
|
||||
# 'x-csrf-token': cookies['ct0'] or '',
|
||||
# 'x-guest-token': cookies['guest_token'] or '',
|
||||
# 'x-twitter-auth-type': 'OAuth2Session' if cookies['auth_token'] else '',
|
||||
# 'x-twitter-active-user': 'yes',
|
||||
# 'x-twitter-client-language': 'en',
|
||||
# }
|
||||
# return dict(sorted({k.lower(): v for k, v in headers.items()}.items()))
|
||||
|
||||
|
||||
def find_key(obj: any, key: str) -> list:
|
||||
"""
|
||||
Find all values of a given key within a nested dict or list of dicts
|
||||
|
||||
Reference in New Issue
Block a user