From b690585377421a7570c686835915fe7e6b49785f Mon Sep 17 00:00:00 2001 From: wangweichen Date: Thu, 23 Mar 2017 13:32:38 +0800 Subject: [PATCH 1/2] Add proxy for http and web socket --- slackclient/_client.py | 5 +++-- slackclient/_server.py | 35 +++++++++++++++++++++++++++-------- slackclient/_slackrequest.py | 7 +++---- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/slackclient/_client.py b/slackclient/_client.py index 00b0225cd..4a0efd8f2 100644 --- a/slackclient/_client.py +++ b/slackclient/_client.py @@ -22,10 +22,11 @@ class SlackClient(object): `here `_ Note: Be `careful with your token `_ ''' - def __init__(self, token): + + def __init__(self, token, proxies=None): self.token = token - self.server = Server(self.token, False) + self.server = Server(self.token, False, proxies) def append_user_agent(self, name, version): self.server.append_user_agent(name, version) diff --git a/slackclient/_server.py b/slackclient/_server.py index cc413a481..dbc8f5246 100644 --- a/slackclient/_server.py +++ b/slackclient/_server.py @@ -1,11 +1,13 @@ -from slackclient._slackrequest import SlackRequest -from slackclient._channel import Channel -from slackclient._user import User -from slackclient._util import SearchList, SearchDict +import json from ssl import SSLError +from requests.packages.urllib3.util.url import parse_url from websocket import create_connection -import json + +from slackclient._channel import Channel +from slackclient._slackrequest import SlackRequest +from slackclient._user import User +from slackclient._util import SearchList, SearchDict class Server(object): @@ -14,7 +16,8 @@ class Server(object): ''' - def __init__(self, token, connect=True): + + def __init__(self, token, connect=True, proxies=None): self.token = token self.username = None self.domain = None @@ -24,7 +27,8 @@ def __init__(self, token, connect=True): self.channels = SearchList() self.connected = False self.ws_url = None - self.api_requester = SlackRequest() + self.proxies = proxies + self.api_requester = SlackRequest(proxies) if connect: self.rtm_connect() @@ -88,8 +92,23 @@ def parse_slack_login_data(self, login_data): self.parse_user_data(login_data["users"]) def connect_slack_websocket(self, ws_url): + + if self.proxies: + proxy = self.proxies.get("http") or self.proxies.get("https") + scheme_proxy = parse_url(proxy) + proxy_host = scheme_proxy.host + proxy_port = scheme_proxy.port + proxy_auth = scheme_proxy.auth + if proxy_auth: + proxy_auth = tuple(proxy_auth.split(":")) + else: + proxy_host, proxy_port, proxy_auth = None, None, None + try: - self.websocket = create_connection(ws_url) + self.websocket = create_connection(ws_url, + http_proxy_port=proxy_port, + http_proxy_auth=proxy_auth, + http_proxy_host=proxy_host) self.websocket.sock.setblocking(0) except: raise SlackConnectionError diff --git a/slackclient/_slackrequest.py b/slackclient/_slackrequest.py index 30a5404bc..f61ddc42d 100644 --- a/slackclient/_slackrequest.py +++ b/slackclient/_slackrequest.py @@ -9,8 +9,7 @@ class SlackRequest(object): - def __init__(self): - + def __init__(self, proxies=None): # __name__ returns 'slackclient._slackrequest', we only want 'slackclient' client_name = __name__.split('.')[0] client_version = __version__ # Version is returned from version.py @@ -21,7 +20,7 @@ def __init__(self): "python": "Python/{v.major}.{v.minor}.{v.micro}".format(v=sys.version_info), "system": "{0}/{1}".format(platform.system(), platform.release()) } - + self.proxies = proxies self.custom_user_agent = None def get_user_agent(self): @@ -76,4 +75,4 @@ def do(self, token, request="?", post_data=None, domain="slack.com", timeout=Non post_data['token'] = token headers = {'user-agent': self.get_user_agent()} - return requests.post(url, headers=headers, data=post_data, files=files, timeout=timeout) + return requests.post(url, headers=headers, data=post_data, files=files, timeout=timeout, proxies=self.proxies) From 0918f708a2e39aa3ce4b4a574fd4a62b6056c3b1 Mon Sep 17 00:00:00 2001 From: wangweichen Date: Fri, 24 Mar 2017 09:30:58 +0800 Subject: [PATCH 2/2] Remove proxy --- slackclient/_server.py | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/slackclient/_server.py b/slackclient/_server.py index dbc8f5246..2a485d81a 100644 --- a/slackclient/_server.py +++ b/slackclient/_server.py @@ -92,23 +92,8 @@ def parse_slack_login_data(self, login_data): self.parse_user_data(login_data["users"]) def connect_slack_websocket(self, ws_url): - - if self.proxies: - proxy = self.proxies.get("http") or self.proxies.get("https") - scheme_proxy = parse_url(proxy) - proxy_host = scheme_proxy.host - proxy_port = scheme_proxy.port - proxy_auth = scheme_proxy.auth - if proxy_auth: - proxy_auth = tuple(proxy_auth.split(":")) - else: - proxy_host, proxy_port, proxy_auth = None, None, None - try: - self.websocket = create_connection(ws_url, - http_proxy_port=proxy_port, - http_proxy_auth=proxy_auth, - http_proxy_host=proxy_host) + self.websocket = create_connection(ws_url) self.websocket.sock.setblocking(0) except: raise SlackConnectionError