Solusi untuk mendapatkan pesan permintaan http yang dikirim oleh Docker

Penulis:FMZ~Lydia, Dibuat: 2022-11-10 20:49:38, Diperbarui: 2023-09-14 20:36:06

Solution to Get the http Request Message Sent by the Docker

Saat menguji dan debugging kode strategi, atau menjalankan robot pada bot nyata, antarmuka pertukaran sering melaporkan kesalahan. Pada saat ini, pergi ke dokumen API antarmuka pertukaran untuk menanyakan informasi kesalahan yang relevan. Saat berkonsultasi dengan layanan pelanggan teknis API pertukaran, Anda selalu perlu memberikan pesan permintaan ketika kesalahan dilaporkan untuk menganalisis penyebab kesalahan.

Pada saat ini, tidak ada cara untuk menemukan masalah tanpa melihat informasi pesan.

1. Menggunakan perpustakaan scapy Python untuk mengambil paket dan mencetak pesan permintaan yang dikirim

Pertama kita memasangscapymodul

pip3 install scapy 

Kemudian kita membuat strategi 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")

Kemudian kita membuat robot yang menggunakan strategi, dan bot itu akan menangkap paket http yang dikirim dari server penyedia docker miliknya (yang https tidak dapat menangkap kita akan memiliki beberapa solusi ini).

Jalankan robot menangkap paket, dan kemudian Anda dapat menggunakan alat debugging untuk mengirim permintaan untuk membiarkan robot menangkap paket.

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

Informasi yang dicetak oleh robot yang menangkap paket:Solution to Get the http Request Message Sent by the Docker

Kita bisa menyalin dan melihat pesan: Pesan permintaan 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:

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, seperti Gecko) Chrome/35.0.1916.153 Safari/537.36 Panjang isi: 25 Content-Type: aplikasi/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 Terima-Enkoding: gzip

{Y: i: i: i: i: i: i}

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.

fungsi utama exchange.SetBase(http://127.0.0.1:8080) // Di sini, kita mengubah alamat basis ke mesin lokal, port 8080, dan Netcat dapat mendapatkan permintaan // Permintaan POST exchange.IO ((api, POST, /api/swap/v3/order, aaa=111&bbb=222)

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

{\cH00FFFF} ` POST pesan permintaan dicetak di terminal:Solution to Get the http Request Message Sent by the Docker

Pesan permintaan GET dicetak di terminal:Solution to Get the http Request Message Sent by the Docker


Informasi lebih lanjut