【问题标题】:how to connect a discord bot through proxy如何通过代理连接不和谐机器人
【发布时间】:2021-12-11 23:14:39
【问题描述】:

我正在尝试使用 discord.py 并通过代理运行不和谐机器人。 discordpy doc on this 在该主题上非常稀缺,并且与 aiohttp implementation. 不同步

discordpy 文档基本上说使用 ProxyConnector 并在创建客户端时将其作为参数传递。 但是在 aiohttp 中,这种方式已被弃用,而是推荐使用 client.ClientSession().get。问题是,client.ClientSession().get 要求我提供一个 URL。

我也尝试过使用 ProxyConnector,但是当我最终运行机器人时它不起作用(无法连接到不和谐的 API)。我不确定它有什么问题,因为代理本身可以与任何其他 HTTPS 服务一起正常工作。


推荐方式的代码

conn = client.ClientSession().get(proxy='<proxy_url>', proxy_auth=BasicAuth(<proxy_auth>))

self.client = discord.Client(connector=conn)

不推荐使用方式的代码

conn = ProxyConnector(proxy='<proxy_url>', proxy_auth=BasicAuth(<proxy_auth>))

self.client = discord.Client(connector=conn)

追溯

Traceback (most recent call last):
  File "C:/Users/airiau/PycharmProjects/pronostics/main.py", line 50, in <module>
    main()
  File "C:/Users/airiau/PycharmProjects/pronostics/main.py", line 46, in main
    bot.run(config['token'])
  File "C:\Users\airiau\PycharmProjects\pronostics\sample\DiscordBot.py", line 352, in run
    self.client.run(self.token)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 519, in run
    self.loop.run_until_complete(self.start(*args, **kwargs))
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\base_events.py", line 468, in run_until_complete
    return future.result()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 491, in start
    yield from self.connect()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\client.py", line 444, in connect
    self.ws = yield from DiscordWebSocket.from_client(self)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\gateway.py", line 207, in from_client
    timeout=60, loop=client.loop)
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\tasks.py", line 358, in wait_for
    return fut.result()
  File "C:\Users\airiau\venv-3.6\lib\site-packages\discord\gateway.py", line 65, in _ensure_coroutine_connect
    ws = yield from websockets.connect(gateway, loop=loop, klass=klass)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\websockets\py35\client.py", line 19, in __await__
    return (yield from self.client)
  File "C:\Users\airiau\venv-3.6\lib\site-packages\websockets\client.py", line 210, in connect
    factory, wsuri.host, wsuri.port, **kwds)
  File "C:\Program Files (x86)\Python36-32\lib\asyncio\base_events.py", line 787, in create_connection
    ', '.join(str(exc) for exc in exceptions)))
OSError: Multiple exceptions: [Errno 10060] Connect call failed ('104.16.59.37', 443), [Errno 10060] Connect call failed ('104.16.60.37', 443)

【问题讨论】:

    标签: discord aiohttp


    【解决方案1】:

    通过继续研究,我发现这个link 有这个答案:

    discord.py 使用的 WebSocket 似乎不支持 HTTP 代理。这将神奇地与 HTTPS 一起工作,但由于 代理是 HTTP 它不是。这意味着,没有重写 带有 HTTP 代理支持的 discord.py(通过使用 websocket-client,用于 例如,它支持 HTTP 代理),我们可能不走运。

    似乎不可能完全做到这一点。

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 2020-07-05
      • 2019-08-16
      • 2019-05-08
      • 2020-06-07
      • 2020-06-22
      • 2021-05-27
      • 2018-03-20
      • 2019-08-01
      相关资源
      最近更新 更多