From 94a0f6b3df974c3c02216b536a1515bf3c83d37c Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Wed, 26 Jun 2019 18:24:36 +0200 Subject: [PATCH] Move client session into State --- fbchat/_client.py | 17 ++++++++--------- fbchat/_state.py | 8 ++++++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/fbchat/_client.py b/fbchat/_client.py index a6718cb..c859489 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -130,7 +130,7 @@ class Client(object): allow_redirects=True, ): payload = self._generatePayload(query) - r = self._session.get( + r = self._state._session.get( prefix_url(url), headers=self._header, params=payload, @@ -163,7 +163,7 @@ class Client(object): error_retries=3, ): payload = self._generatePayload(query) - r = self._session.post( + r = self._state._session.post( prefix_url(url), headers=self._header, data=payload, verify=self.ssl_verify ) if not fix_request: @@ -200,7 +200,7 @@ class Client(object): headers = dict( (i, self._header[i]) for i in self._header if i != "Content-Type" ) - r = self._session.post( + r = self._state._session.post( prefix_url(url), headers=headers, data=payload, @@ -259,19 +259,18 @@ class Client(object): def _resetValues(self): self._state = State() - self._session = requests.session() self._seq = "0" self._uid = None self._client_id = hex(int(random() * 2147483648))[2:] def _postLogin(self): - self._uid = self._session.cookies.get_dict().get("c_user") + self._uid = self._state._session.cookies.get_dict().get("c_user") if self._uid is None: raise FBchatException("Could not find c_user cookie") self._uid = str(self._uid) r = self._get("/") - self._state = State.from_base_request(r.text) + self._state = State.from_base_request(self._state._session, r.text) def _login(self, email, password): soup = bs(self._get("https://m.facebook.com/").text, "html.parser") @@ -379,7 +378,7 @@ class Client(object): :return: A dictionay containing session cookies :rtype: dict """ - return self._session.cookies.get_dict() + return self._state._session.cookies.get_dict() def setSession(self, session_cookies): """Loads session cookies @@ -395,8 +394,8 @@ class Client(object): try: # Load cookies into current session - self._session.cookies = requests.cookies.merge_cookies( - self._session.cookies, session_cookies + self._state._session.cookies = requests.cookies.merge_cookies( + self._state._session.cookies, session_cookies ) self._postLogin() except Exception as e: diff --git a/fbchat/_state.py b/fbchat/_state.py index 7b734a6..6822f95 100644 --- a/fbchat/_state.py +++ b/fbchat/_state.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import attr import bs4 import re +import requests from . import _util @@ -14,6 +15,7 @@ FB_DTSG_REGEX = re.compile(r'name="fb_dtsg" value="(.*?)"') class State(object): """Stores and manages state required for most Facebook requests.""" + _session = attr.ib(factory=requests.session) fb_dtsg = attr.ib(None) _revision = attr.ib(None) _counter = attr.ib(0) @@ -35,7 +37,7 @@ class State(object): } @classmethod - def from_base_request(cls, content): + def from_base_request(cls, session, content): soup = bs4.BeautifulSoup(content, "html.parser") fb_dtsg_element = soup.find("input", {"name": "fb_dtsg"}) @@ -50,4 +52,6 @@ class State(object): logout_h_element = soup.find("input", {"name": "h"}) logout_h = logout_h_element["value"] if logout_h_element else None - return cls(fb_dtsg=fb_dtsg, revision=revision, logout_h=logout_h) + return cls( + session=session, fb_dtsg=fb_dtsg, revision=revision, logout_h=logout_h + )