Penyelesaian untuk mendapatkan mesej permintaan http yang dihantar oleh Docker

Penulis:Lydia, Dicipta: 2022-11-10 20:49:38, Dikemas kini: 2023-09-14 20:36:06

img

Apabila menguji dan menyahsalahkan kod strategi, atau menjalankan robot pada bot sebenar, antara muka pertukaran sering melaporkan ralat. Pada masa ini, pergi ke dokumen API antara muka pertukaran untuk menanyakan maklumat ralat yang berkaitan. Apabila berunding dengan perkhidmatan pelanggan teknikal API pertukaran, anda selalu perlu memberikan mesej permintaan apabila ralat dilaporkan untuk menganalisis penyebab ralat.

Pada masa ini, tidak ada cara untuk mencari masalah tanpa melihat maklumat mesej.

1. Menggunakan perpustakaan scapy Python untuk mengambil pakej dan mencetak mesej permintaan yang dihantar

Pertama kita memasangscapyModul

pip3 install scapy 

Kemudian kita mencipta 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 mencipta robot yang menggunakan strategi, dan bot itu akan menangkap pakej http yang dihantar dari pelayan penyedia docker yang dimiliki (yang https tidak dapat menangkap kita akan mempunyai beberapa penyelesaian ini).

Jalankan robot yang menangkap pakej, dan kemudian anda boleh menggunakan alat debugging untuk menghantar permintaan untuk membiarkan robot menangkap pakej.

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

Maklumat yang dicetak oleh robot menangkap pakej:img

Kita boleh menyalin dan melihat mesej: GET permintaan mesej:

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 berubah untuk dapat menangkap pakej, anda boleh mengabaikannya, yang betul harusHost: www.okex.comKita boleh lihat pautan dalam mesej permintaan adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, ia adalah untuk meminta data pasaran kontrak kekal BTC asli.

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

Kita boleh lihat laluan permintaan adalah:/api/swap/v3/order. Kunci Akses Diperiksa:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Untuk demonstrasi sahaja, bukan kunci sebenar) Tanda tangan permintaan:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY kunci rahsiaPassphrase:abc123(Hanya untuk demonstrasi) Data Badan yang diminta:{"aaa":"111","bbb":"222"}

Dengan cara ini, kita boleh memerhatikan mesej permintaan dan menganalisis sebab mengapa permintaan antara muka menghadapi ralat.

2. Permintaan mendengar tempatan

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

Pada terminal, jalankan Netcat dengan perintahnc - l 8080.

Seperti gambar di bawah:img

Begitu juga, kita menggunakan docker pada komputer kita, dan kemudian menggunakan kod berikut untuk menghantar permintaan dalam 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()
}

Mesej permintaan POST dicetak di terminal:img

Mesej permintaan GET dicetak di terminal:img


Lebih lanjut