From 8538698072e886ac9261962d94762a49cbcd146f Mon Sep 17 00:00:00 2001 From: Jed Reynolds Date: Thu, 10 Dec 2020 20:17:30 -0800 Subject: [PATCH] GUI: LFRequest: WIP: adding places for proxy assignments --- py-json/LANforge/LFRequest.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/py-json/LANforge/LFRequest.py b/py-json/LANforge/LFRequest.py index 2b5db1c7..99761ea5 100644 --- a/py-json/LANforge/LFRequest.py +++ b/py-json/LANforge/LFRequest.py @@ -7,7 +7,7 @@ if sys.version_info[0] != 3: print("This script requires Python 3") exit() - +import pprint import urllib.request import urllib.error import urllib.parse @@ -21,11 +21,24 @@ class LFRequest: requested_url = "" post_data = No_Data default_headers = { 'Accept': 'application/json'} + proxies = None - def __init__(self, url, uri=None, debug_=False, die_on_error_=False): + def __init__(self, url=None, + uri=None, + proxies_=None, + debug_=False, + die_on_error_=False): self.debug = debug_ self.die_on_error = die_on_error_; + # please see this discussion on ProxyHandlers: + # https://docs.python.org/3/library/urllib.request.html#urllib.request.ProxyHandler + if proxies_ is not None: + # check to see if proxy has some fields + if ("host" not in proxies_) or ("user" not in proxies_): + raise ValueError("HTTP proxy requires, host, user, pass values.") + self.proxies = proxies_; + if not url.startswith("http://") and not url.startswith("https://"): print("No http:// or https:// found, prepending http:// to "+url) url = "http://" + url @@ -52,6 +65,12 @@ class LFRequest: if self.debug: print("new LFRequest[%s]" % self.requested_url ) + def update_proxies(self, request): + if (request is None) or (self.proxies is None): + return + + for (proto, host) in self.proxies.items(): + request.set_proxy(host, proto) # request first url on stack @@ -62,7 +81,7 @@ class LFRequest: if self.die_on_error: die_on_error_ = True if (debug == False) and (self.debug == True): - debug = True; + debug = True responses = [] urlenc_data = "" if (debug): @@ -79,6 +98,8 @@ class LFRequest: request = urllib.request.Request(url=self.requested_url, headers=self.default_headers) print("No data for this formPost?") + self.update_proxies(request) + request.headers['Content-type'] = 'application/x-www-form-urlencoded' resp = '' try: @@ -207,6 +228,7 @@ class LFRequest: myrequest = urllib.request.Request(url=self.requested_url, headers=self.default_headers, method=method_) + self.update_proxies(myrequest) myresponses = [] try: myresponses.append(urllib.request.urlopen(myrequest))