首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将SOCKS代理设置为websocket-client

如何将SOCKS代理设置为websocket-client
EN

Stack Overflow用户
提问于 2021-04-15 12:06:39
回答 1查看 546关注 0票数 0

我试图用create_connection将SOCKS代理设置为websocket-clientWebSocket,但在websocket发送握手请求后,它总是关闭套接字。

代码语言:javascript
运行
复制
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包装套接字的方式。

代码语言:javascript
运行
复制
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()函数只是一个包装代理的函数。

代码语言:javascript
运行
复制
    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, self.host, self.port, username=self.username, password=self.password)
        elif self.proxy_type == "socks5":
            s.set_proxy(SOCKS5, self.host, self.port, username=self.username, password=self.password)
        else:
            raise ProxyError("Proxy type not found: " + self.proxy_type)

        return s

为什么会发生这种情况,我如何用SOCKS代理包装我的websocket?

EN

回答 1

Stack Overflow用户

发布于 2021-04-16 03:51:33

编辑:我试图连接到一个SSL安全端口,所以我不得不用SSL包装器包装套接字。

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67102140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档