Ccxt: aiohttp_proxy nach der ersten Anfrage zu ändern hat keine Auswirkung

Erstellt am 27. Feb. 2018  ·  3Kommentare  ·  Quelle: ccxt/ccxt

  • Betriebssystem: Windows
  • Programmiersprachenversion: Python async
  • CCXT-Version: 1201

Das Ändern von aiohttp_proxy nach der ersten Anfrage hat keine Auswirkung. Wenn es nach dem ersten (zum Beispiel) await e.load_markets() , wird es nicht verwendet. Wenn es vor dem ersten await e.load_markets() , wird es weiterhin zu diesem Proxy-Server gehen, auch wenn Sie aiohttp_proxy später auf einen anderen Proxy-Server ändern.

Wie kann man das am einfachsten beheben? close() aufrufen und die Sitzungsvariable überschreiben ? Und/oder muss dies in ccxt behoben werden (fügen Sie beispielsweise eine andere Methode hinzu, um die Sitzung neu zu starten)

import ccxt.async as ccxt
import asyncio
import test2_config as config


async def main():
    exchange = 'gatecoin'
    e = getattr(ccxt, exchange)()
    e.verbose = True
    e.apiKey = config.exchange_keys[exchange]['key']
    e.secret = config.exchange_keys[exchange]['secret']
    e.aiohttp_proxy = 'http://' + config.check_proxylist[0]['host'] + ':' + config.check_proxylist[0]['port']
    await e.load_markets(reload=True)
    e.aiohttp_proxy = 'http://' + config.transaction_proxy['host'] + ':' + config.transaction_proxy['port']
    await e.load_markets(reload=True)
    await e.close()


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Ausführliche Ausgabe

Request: GET https://api.gatecoin.com/Public/LiveTickers {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate'} None

Response: GET https://api.gatecoin.com/Public/LiveTickers 200 <CIMultiDictProxy('Date': 'Tue, 27 Feb 2018 18:15:41 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Cookie': '__cfduid=<snip>; expires=Wed, 27-Feb-19 18:15:40 GMT; path=/; domain=.gatecoin.com; HttpOnly', 'Cache-Control': 'private', 'Content-Encoding': 'gzip', 'Strict-Transport-Security': 'max-age=15552000; includeSubDomains; preload', 'X-Content-Type-Options': 'nosniff', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '<snip>-DUB')> <snip>

Request: GET https://api.gatecoin.com/Public/LiveTickers {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate'} None

Response: GET https://api.gatecoin.com/Public/LiveTickers 200 <CIMultiDictProxy('Date': 'Tue, 27 Feb 2018 18:15:41 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Cache-Control': 'private', 'Content-Encoding': 'gzip', 'Strict-Transport-Security': 'max-age=15552000; includeSubDomains; preload', 'X-Content-Type-Options': 'nosniff', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '<snip>-DUB')> <snip>
question

Alle 3 Kommentare

Anscheinend funktioniert der Proxy per TCP-Verbindung. Wenn es nicht geschlossen ist, werden vorherige Proxys verwendet. Wenn ich hinzufüge
headers['Connection'] = 'close' an die fetch-Methode in der Basis-Exchange-Klasse (für async), funktioniert die Proxy-Rotation wie erwartet, da die TCP-Verbindung nach der ersten Anfrage geschlossen wird. Wenn dieser Header nicht hinzugefügt wird, bleibt die TCP-Verbindung zum vorherigen Proxy geöffnet und aiohttp verwendet diese unabhängig vom neuen aiohttp_proxy wieder.

Das Verhalten kann also je nach Proxy und Exchange unterschiedlich sein, je nachdem, ob/wie sie Keepalive implementieren.

Ich kann jedoch keinen "sauberen" Weg finden, um headers['Connection'] = 'close' zu injizieren.

Ich kann jedoch keine 'saubere' Möglichkeit finden, headers['Connection'] = 'close' einzufügen.

Fügen Sie exchange.headers = {'Connection': 'close'} bevor Sie den Anruf tätigen oder direkt nach dem Erstellen der Exchange-Instanz:


# option 1
exchange = ccxt.gatecoin({'headers': {'Connection': 'close'}})

# option 2
exchange = ccxt.gatecoin()
exchange.headers = {'Connection': 'close'}

Lassen Sie es uns wissen, wenn es nicht hilft. Danke!

Scheint zu funktionieren, thx!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen