Ccxt: 最初のリクエスト後にaiohttp_proxyを変更しても効果はありません

作成日 2018年02月27日  ·  3コメント  ·  ソース: ccxt/ccxt

  • OS:Windows
  • プログラミング言語バージョン:Python非同期
  • CCXTバージョン:1201

最初のリクエスト後にaiohttp_proxyを変更しても効果はありません。 最初の(たとえば) await e.load_markets()後に設定されている場合、使用されません。 最初のawait e.load_markets()前に設定されている場合

これを修正する最も簡単な方法は何ですか? close()を呼び出して、セッション変数を上書きしますか? および/またはこれはccxtで修正する必要があるものです(たとえば、セッションを再開するために別のメソッドを追加します)

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())

冗長出力

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

全てのコメント3件

どうやらプロキシはTCP接続ごとに機能します。 閉じられていない場合は、以前のプロキシが使用されています。 追加すれば
基本交換クラス(非同期の場合)のfetchメソッドへのheaders['Connection'] = 'close'では、最初の要求の後にTCP接続が閉じられるため、プロキシローテーションは期待どおりに機能します。 そのヘッダーが追加されていない場合、前のプロキシへのTCP接続は開いたままになり、aiohttpは新しいaiohttp_proxyに関係なくそのヘッダーを再利用します。

したがって、キープアライブを実装するかどうか/どのように実装するかによって、プロキシと交換によって動作が異なる可能性があります。

しかし、 headers['Connection'] = 'close'を注入するための「クリーンな」方法が見つかりません。

しかし、headers ['Connection'] = 'close'を挿入する 'クリーンな'方法が見つかりません。

呼び出しを発行する前、または交換インスタンスを作成した直後にexchange.headers = {'Connection': 'close'}を追加します。


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

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

それが役に立たない場合はお知らせください。 THX!

うまくいくようです、thx!

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

wannesdemaeght picture wannesdemaeght  ·  3コメント

jjhesk picture jjhesk  ·  3コメント

hippylover picture hippylover  ·  3コメント

luigikitten picture luigikitten  ·  3コメント

forexhill picture forexhill  ·  3コメント