Docker が送信した http リクエスト メッセージ を 取得 する 解決策

作者: リン・ハーンリディア, 作成日:2022年11月10日 20:49:38, 更新日:2023年9月14日 20:36:06

img

戦略コードをテスト・デバッグしたり,ロボットを実際のボットで実行したりすると,交換インターフェイスはエラーを報告することが多い.この時点で,関連するエラー情報をクエリするために交換インターフェイス API ドキュメントに移動します.交換 API 技術顧客サービスに問い合わせるとき,エラーが報告されたとき,エラーの原因を分析するために常に要求メッセージを提供する必要があります.

この記事では,2つの解決策を一緒に検討します.

1. Python の scapy ライブラリ を使ってパケットを取り出し,送信された要求メッセージをプリントする

まず 装置を設置しますscapyモジュール

pip3 install scapy 

Pythonの戦略を設定します

from scapy.all import *

def Method_print(packet):
    ret = "\n".join(packet.sprintf("{Raw:%Raw.load%}").split(r"\r\n"))
    Log(ret)

sniff(
    iface='eth0',
    prn=Method_print,
    lfilter=lambda p: "GET" in str(p) or "POST" in str(p),
    filter="tcp")

この戦略を利用するロボットを作成し,そのロボットは,そのドッカープロバイダのサーバーから送られた http パケットをキャッチします (httpsがキャッチできないのは,解決法があります).

パケットキャッチロボットを起動して デバッグツールを使って ロボットにパケットをキャッチさせるリクエストを送ることができます. デバッグツールではリクエストを送信するコードを書きます.

function main(){
    // The base address should be set as the address of other http protocols. If the exchange address is not set, it is generally https. In this case, packets cannot be captured
    exchange.SetBase("http://www.baidu.com")    
    
    // POST request
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET request
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

パッケージ捕獲ロボットによって印刷された情報:img

メッセージが表示されます. GET要求メッセージ:

GET 
/api/swap/v3/instruments/BTC-USD-SWAP/ticker 
HTTP/1.1 
Host: www.baidu.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 Accept-Encoding: gzip 

Host: www.baidu.comパケットを捕まえるために変更したものです. 無視することができます. 正確なものはHost: www.okex.com要求メッセージのリンクは:/api/swap/v3/instruments/BTC-USD-SWAP/tickerBTCネイティブの永続契約市場データを要求する.

POST 要求メッセージ:

POST 
/api/swap/v3/order 
HTTP/1.1 
Host: www.baidu.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 
Content-Length: 25 
Content-Type: application/json; charset=UTF-8 
Ok-Access-Key: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 
Ok-Access-Passphrase: abc123 
Ok-Access-Sign: h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= 
Ok-Access-Timestamp: 2020-09-23T08:43:49.906Z Accept-Encoding: gzip 

{"aaa":"111","bbb":"222"}

要求経路は次のとおりです./api/swap/v3/orderわかった 確認されたアクセスキー:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(実際のKEYではなく,デモのみ) 申請の署名:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY 秘密鍵 パスフレーズabc123(デモのみ) 要求される機関データ:{"aaa":"111","bbb":"222"}

インターフェースの要求がエラーになる理由を分析できます インターフェースの要求がエラーになる理由を分析します

2. 地元での聴取要請

ロボットを作る必要がありません.Netcatマックに付属するhttps://baike.baidu.com/item/Netcat/9952751?fr=aladdin要求を監視し メッセージを印刷する

ターミナルで,命令でNetcatを実行nc - l 8080.

下の写真のように:img

同じようにコンピュータにドッカーを設置して 次のコードを使って デバッグツールでリクエストを送ります

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // Here, we change the base address to the local machine, port 8080, and Netcat can get the request
    // POST request
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET request
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

端末に印刷されたPOST要求メッセージ:img

端末に印刷された GET リクエストメッセージ:img


もっと