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

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

Solution to Get the http Request Message Sent by the Docker

戦略コードをテスト・デバッグしたり,ロボットを実際のボットで実行したりすると,交換インターフェイスはエラーを報告することが多い.この時点で,関連するエラー情報をクエリするために交換インターフェイス 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()
}

パッケージ捕獲ロボットによって印刷された情報:Solution to Get the http Request Message Sent by the Docker

メッセージが表示されます. 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 
We can see the link in the request message is: ```/api/swap/v3/instruments/BTC-USD-SWAP/ticker```, it is to request the BTC native perpetual contract market data.

POST request message:

郵便局 /api/swap/v3/order について HTTP/1.1 主催者: www.baidu.com ユーザーエージェント: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML,ゲッコのように) Chrome/35.0.1916.153 Safari/537.36 内容長: 25 コンテンツタイプ:アプリケーション/json;文字セット=UTF-8 OK アクセスキー: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 OK アクセス パスフレーズ: abc123 OK アクセスサイン h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= OK-Access-Timestamp: 2020-09-23T08:43:49.906Z 承認・エンコーディング: gzip

{cH00ffff} aaa:111,bbb:222

We can see the request path is: ```/api/swap/v3/order```.
Verified Access Key: ```d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4``` (For demonstration only, not the real KEY)
Signature of the request: ```h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=```
API KEY secret key--Passphrase: ```abc123``` (For demonstration only)
Requested Body data: ```{"aaa":"111","bbb":"222"}```。

In this way, we can observe the request message and analyze the reason why the interface request encounters an error.

### 2. Local listening request
The second method does not need to create a robot, just uses the ```Netcat``` that comes with the Mac: https://baike.baidu.com/item/Netcat/9952751?fr=aladdin. Monitor the requests and print messages.

On the terminal, run Netcat with the command ```nc - l 8080```.

As the picture below:
![Solution to Get the http Request Message Sent by the Docker](/upload/asset/28d7f2156cdb996092a8a.png)

Similarly, we deploy a docker on our computer, and then use the following code to send requests in the debugging tool.

メイン機能 ここで,私たちはローカルマシン,ポート8080のベースアドレスを変更し,Netcatは要求を得ることができます // POST リクエスト 交換.IO ((api,POST,/api/swap/v3/order,aaa=111&bbb=222)

// GET request
exchange.SetContractType("swap")
exchange.GetTicker()

{ \ pos (192,220) } ` 端末に印刷されたPOST要求メッセージ:Solution to Get the http Request Message Sent by the Docker

端末に印刷された GET リクエストメッセージ:Solution to Get the http Request Message Sent by the Docker


もっと見る