Docker の HTTP リクエスト メッセージ を 取得 する ソリューション

作者: リン・ハーンニナバダス作成日:2022-04-27 10:55:50,更新日:2022-04-27 10:57:37 更新日:2022-04-27 更新日:2022-04-27 10:57:37 更新日:2022-04-27 更新日:2022-04-27 更新日:2022-04-27 更新日:2022-04-27 更新日:2022-04-27 更新日:2017-04-27 更新日:2022-04-27 更新日:2017-04-27 更新日:2022-04-27 更新日:2022-04-27

Docker の HTTP リクエスト メッセージ を 取得 する ソリューション

戦略コードをテスト・デバッグしたり,ボットをリアルマーケットで実行したりすると,プラットフォームインターフェイスはエラーが報告される.この時点で,プラットフォームインターフェイス APIのドキュメントをクエリし,関連するエラー報告情報を検索し,常にエラーの要求メッセージを提供する必要があります.プラットフォーム API技術サービスにクエリするときに,エラーの原因を分析します.

この記事では,2つの解決策について説明します. この記事では,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 to the address of other http protocols. If the address of a platform is not set, it is generally https, so the packet 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/ticker暗号化 (BTC) 永久契約市場データを要求するものです

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. 地元 の 聴衆 の 要求

ボットを作ることなくNetcatMac システムに付属しています.https://baike.baidu.com/item/Netcat/9952751?fr=aladdin要求を聞き メッセージを印刷する

ターミナルで,コマンドを使用します.nc -l 8080Netcatを運営するために

画像のように:img

同じように このマシンにドーカーを展開し デバッグツールで 次のコードを使って リクエストを送信します

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // here we modify the base address to the local, port 8080, and then Netcat can listen to the requests 
    // 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


もっと