Solusi untuk mendapatkan pesan permintaan http yang dikirim oleh Docker

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

img

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:img

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 

Host: www.baidu.comadalah apa yang kita ubah untuk dapat menangkap paket, Anda dapat mengabaikannya, yang benar harusHost: www.okex.comKita bisa melihat link dalam pesan permintaan adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, adalah untuk meminta data pasar kontrak abadi BTC asli.

POST pesan permintaan:

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"}

Kita bisa melihat jalur permintaan adalah:/api/swap/v3/orderAku tidak tahu. Kunci akses yang diverifikasi:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Hanya untuk demonstrasi, bukan KEY yang sebenarnya) Tanda tangan permintaan:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY kunci rahasia Passphrase:abc123(Hanya untuk demonstrasi) Data Badan yang diminta:{"aaa":"111","bbb":"222"}

Dengan cara ini, kita dapat mengamati pesan permintaan dan menganalisis alasan mengapa permintaan antarmuka mengalami kesalahan.

2. Permintaan mendengarkan lokal

Metode kedua tidak perlu membuat robot, hanya menggunakanNetcatyang datang dengan Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdin- Memantau permintaan dan mencetak pesan.

Di terminal, jalankan Netcat dengan perintahnc - l 8080.

Seperti gambar di bawah ini:img

Demikian pula, kita menyebarkan docker pada komputer kita, dan kemudian menggunakan kode berikut untuk mengirim permintaan di alat debugging.

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 pesan permintaan dicetak di terminal:img

Pesan permintaan GET dicetak di terminal:img


Lebih banyak