From 91cf4589a5ac3a4dd45f93ed65285cb49e0a9f9c Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Fri, 30 Aug 2019 18:05:24 +0200 Subject: [PATCH] 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. --- fbchat/_client.py | 22 +++++++--------------- fbchat/_state.py | 12 ++++++------ tests/utils.py | 1 - 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/fbchat/_client.py b/fbchat/_client.py index 70335e9..a89edb9 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -57,15 +57,12 @@ class Client: """ return self._uid - def __init__( - self, email, password, user_agent=None, max_tries=5, session_cookies=None - ): + def __init__(self, email, password, max_tries=5, session_cookies=None): """Initialize and log in the client. Args: email: Facebook ``email``, ``id`` or ``phone number`` 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 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 ( not session_cookies - or not self.setSession(session_cookies, user_agent=user_agent) + or not self.setSession(session_cookies) or not self.isLoggedIn() ): - self.login(email, password, max_tries, user_agent=user_agent) + self.login(email, password, max_tries) """ INTERNAL REQUEST METHODS @@ -145,7 +142,7 @@ class Client: """ return self._state.get_cookies() - def setSession(self, session_cookies, user_agent=None): + def setSession(self, session_cookies): """Load session cookies. Args: @@ -156,16 +153,14 @@ class Client: """ try: # Load cookies into current session - self._state = _state.State.from_cookies( - session_cookies, user_agent=user_agent - ) + self._state = _state.State.from_cookies(session_cookies) self._uid = self._state.user_id except Exception as e: log.exception("Failed loading session") return False 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``. 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): try: self._state = _state.State.login( - email, - password, - on_2fa_callback=self.on2FACode, - user_agent=user_agent, + email, password, on_2fa_callback=self.on2FACode ) self._uid = self._state.user_id except Exception: diff --git a/fbchat/_state.py b/fbchat/_state.py index e11e2f6..eb9caa1 100644 --- a/fbchat/_state.py +++ b/fbchat/_state.py @@ -23,11 +23,11 @@ def find_input_fields(html): return bs4.BeautifulSoup(html, "html.parser", parse_only=bs4.SoupStrainer("input")) -def session_factory(user_agent=None): +def session_factory(): session = requests.session() session.headers["Referer"] = "https://www.facebook.com" # 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 @@ -120,8 +120,8 @@ class State: } @classmethod - def login(cls, email, password, on_2fa_callback, user_agent=None): - session = session_factory(user_agent=user_agent) + def login(cls, email, password, on_2fa_callback): + session = session_factory() soup = find_input_fields(session.get("https://m.facebook.com/").text) data = dict( @@ -201,8 +201,8 @@ class State: return self._session.cookies.get_dict() @classmethod - def from_cookies(cls, cookies, user_agent=None): - session = session_factory(user_agent=user_agent) + def from_cookies(cls, cookies): + session = session_factory() session.cookies = requests.cookies.merge_cookies(session.cookies, cookies) return cls.from_session(session=session) diff --git a/tests/utils.py b/tests/utils.py index 440001c..23a8b5b 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -93,7 +93,6 @@ def load_client(n, cache): client = Client( load_variable("client{}_email".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), max_tries=1, )