Remove ability to set a custom User-Agent

This causes issues if the User-Agent is set to resemble a mobile phone,
see #431, and besides, it's not an API surface I want / need to support.
This commit is contained in:
Mads Marquart
2019-08-30 18:05:24 +02:00
parent 4155775305
commit 91cf4589a5
3 changed files with 13 additions and 22 deletions

View File

@@ -57,15 +57,12 @@ class Client:
""" """
return self._uid return self._uid
def __init__( def __init__(self, email, password, max_tries=5, session_cookies=None):
self, email, password, user_agent=None, max_tries=5, session_cookies=None
):
"""Initialize and log in the client. """Initialize and log in the client.
Args: Args:
email: Facebook ``email``, ``id`` or ``phone number`` email: Facebook ``email``, ``id`` or ``phone number``
password: Facebook account password password: Facebook account password
user_agent: Custom user agent to use when sending requests. If `None`, user agent will be chosen from a premade list
max_tries (int): Maximum number of times to try logging in max_tries (int): Maximum number of times to try logging in
session_cookies (dict): Cookies from a previous session (Will default to login if these are invalid) session_cookies (dict): Cookies from a previous session (Will default to login if these are invalid)
@@ -81,10 +78,10 @@ class Client:
# If session cookies aren't set, not properly loaded or gives us an invalid session, then do the login # If session cookies aren't set, not properly loaded or gives us an invalid session, then do the login
if ( if (
not session_cookies not session_cookies
or not self.setSession(session_cookies, user_agent=user_agent) or not self.setSession(session_cookies)
or not self.isLoggedIn() or not self.isLoggedIn()
): ):
self.login(email, password, max_tries, user_agent=user_agent) self.login(email, password, max_tries)
""" """
INTERNAL REQUEST METHODS INTERNAL REQUEST METHODS
@@ -145,7 +142,7 @@ class Client:
""" """
return self._state.get_cookies() return self._state.get_cookies()
def setSession(self, session_cookies, user_agent=None): def setSession(self, session_cookies):
"""Load session cookies. """Load session cookies.
Args: Args:
@@ -156,16 +153,14 @@ class Client:
""" """
try: try:
# Load cookies into current session # Load cookies into current session
self._state = _state.State.from_cookies( self._state = _state.State.from_cookies(session_cookies)
session_cookies, user_agent=user_agent
)
self._uid = self._state.user_id self._uid = self._state.user_id
except Exception as e: except Exception as e:
log.exception("Failed loading session") log.exception("Failed loading session")
return False return False
return True return True
def login(self, email, password, max_tries=5, user_agent=None): def login(self, email, password, max_tries=5):
"""Login the user, using ``email`` and ``password``. """Login the user, using ``email`` and ``password``.
If the user is already logged in, this will do a re-login. If the user is already logged in, this will do a re-login.
@@ -189,10 +184,7 @@ class Client:
for i in range(1, max_tries + 1): for i in range(1, max_tries + 1):
try: try:
self._state = _state.State.login( self._state = _state.State.login(
email, email, password, on_2fa_callback=self.on2FACode
password,
on_2fa_callback=self.on2FACode,
user_agent=user_agent,
) )
self._uid = self._state.user_id self._uid = self._state.user_id
except Exception: except Exception:

View File

@@ -23,11 +23,11 @@ def find_input_fields(html):
return bs4.BeautifulSoup(html, "html.parser", parse_only=bs4.SoupStrainer("input")) return bs4.BeautifulSoup(html, "html.parser", parse_only=bs4.SoupStrainer("input"))
def session_factory(user_agent=None): def session_factory():
session = requests.session() session = requests.session()
session.headers["Referer"] = "https://www.facebook.com" session.headers["Referer"] = "https://www.facebook.com"
# TODO: Deprecate setting the user agent manually # TODO: Deprecate setting the user agent manually
session.headers["User-Agent"] = user_agent or random.choice(_util.USER_AGENTS) session.headers["User-Agent"] = random.choice(_util.USER_AGENTS)
return session return session
@@ -120,8 +120,8 @@ class State:
} }
@classmethod @classmethod
def login(cls, email, password, on_2fa_callback, user_agent=None): def login(cls, email, password, on_2fa_callback):
session = session_factory(user_agent=user_agent) session = session_factory()
soup = find_input_fields(session.get("https://m.facebook.com/").text) soup = find_input_fields(session.get("https://m.facebook.com/").text)
data = dict( data = dict(
@@ -201,8 +201,8 @@ class State:
return self._session.cookies.get_dict() return self._session.cookies.get_dict()
@classmethod @classmethod
def from_cookies(cls, cookies, user_agent=None): def from_cookies(cls, cookies):
session = session_factory(user_agent=user_agent) session = session_factory()
session.cookies = requests.cookies.merge_cookies(session.cookies, cookies) session.cookies = requests.cookies.merge_cookies(session.cookies, cookies)
return cls.from_session(session=session) return cls.from_session(session=session)

View File

@@ -93,7 +93,6 @@ def load_client(n, cache):
client = Client( client = Client(
load_variable("client{}_email".format(n), cache), load_variable("client{}_email".format(n), cache),
load_variable("client{}_password".format(n), cache), load_variable("client{}_password".format(n), cache),
user_agent="Mozilla/5.0 (Windows NT 6.3; WOW64; ; NCT50_AAP285C84A1328) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36",
session_cookies=cache.get("client{}_session".format(n), None), session_cookies=cache.get("client{}_session".format(n), None),
max_tries=1, max_tries=1,
) )