如何解决如何将 SOCKS 代理设置为 websocket-client
我正在尝试使用 websocket-client
将 SOCKS 代理设置为 WebSocket
的 create_connection
,但在 websocket 发送握手请求后,它始终保持关闭套接字。
Traceback (most recent call last):
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_core.py",line 252,in connect
self.handshake_response = handshake(self.sock,*addrs,**options)
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_handshake.py",line 79,in handshake
status,resp = _get_resp_headers(sock)
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_handshake.py",line 162,in _get_resp_headers
status,resp_headers,status_message = read_headers(sock)
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_http.py",line 308,in read_headers
line = recv_line(sock)
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_socket.py",line 134,in recv_line
c = recv(sock,1)
File "D:\PyCharmProjects\x-python\venv\lib\site-packages\websocket\_socket.py",line 125,in recv
raise WebSocketConnectionClosedException(
websocket._exceptions.WebSocketConnectionClosedException: Connection is already closed.
python-BaseException
Process finished with exit code -1
这就是我试图用 PySocks 包装套接字的方式。
from socks import socksocket
proxied_sock = socksocket()
proxied_sock.setsockopt(IPPROTO_TCP,TCP_NODELAY,1)
proxied_sock.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
proxied_sock = self.__proxy.set_to_socket(proxied_sock)
proxied_sock.connect((dealer_str,80))
self.__logger.debug("WS wrapped with proxy!")
self.__ws = create_connection(self.__dealer_uri,socket=proxied_sock)
set_to_socket()
函数只是一个包装代理的函数。
def set_to_socket(self,s) -> socksocket:
"""
Sets socket's proxy
:param s: socket.socket
:return: Proxied socket.socket
"""
if self.proxy_type == "http" or self.proxy_type == "https":
s.set_proxy(HTTP,self.host,self.port,username=self.username,password=self.password)
elif self.proxy_type == "socks4":
s.set_proxy(SOCKS4,password=self.password)
elif self.proxy_type == "socks5":
s.set_proxy(SOCKS5,password=self.password)
else:
raise ProxyError("Proxy type not found: " + self.proxy_type)
return s
为什么会发生这种情况,我如何使用 SOCKS 代理包装我的 websocket?
解决方法
编辑:我试图连接到 SSL 安全端口,所以我不得不用 SSL 包装器包装套接字。
proxied_sock = socksocket()
proxied_sock = self.__proxy.set_to_socket(proxied_sock)
dealer_tuple = (dealer_str.split(":")[0],int(dealer_str.split(":")[1]))
proxied_sock.connect(dealer_tuple)
proxied_sock = ssl.wrap_socket(proxied_sock) # We gotta wrap the socket with SSL
self.__logger.debug("Dealer client wrapped with proxy!")
self.__ws = create_connection(self.__dealer_uri,socket=proxied_sock)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。