aboutsummaryrefslogtreecommitdiff
path: root/src/utils/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/http.py')
-rw-r--r--src/utils/http.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/utils/http.py b/src/utils/http.py
index 1bbc9c07..045d9641 100644
--- a/src/utils/http.py
+++ b/src/utils/http.py
@@ -3,6 +3,7 @@ import typing, urllib.error, urllib.parse, uuid
import json as _json
import bs4, netifaces, requests, tornado.httpclient
from src import IRCBot, utils
+from requests_toolbelt.adapters import source
REGEX_URL = re.compile("https?://\S+", re.I)
@@ -78,6 +79,8 @@ class Request(object):
timeout: int=5
+ bindhost: typing.Optional[str] = None
+
def validate(self):
self.id = self.id or str(uuid.uuid4())
self.set_url(self.url)
@@ -189,11 +192,17 @@ def _request(request_obj: Request) -> Response:
redirect = 0
current_url = request_obj.url
+ session = requests.Session()
+ if not request_obj.bindhost is None:
+ new_source = source.SourceAddressAdapter(request_obj.bindhost)
+ session.mount('http://', new_source)
+ session.mount('https://', new_source)
+
while True:
if request_obj.check_hostname:
_assert_allowed(current_url)
- response = requests.request(
+ response = session.request(
request_obj.method,
current_url,
headers=headers,
@@ -218,6 +227,8 @@ def _request(request_obj: Request) -> Response:
raise ValueError("Response too large")
break
+ session.close()
+
headers = utils.CaseInsensitiveDict(dict(response.headers))
our_response = Response(response.status_code, response_content,
encoding=response.encoding, headers=headers,