Penyelesaian untuk Mendapatkan Docker Http Permintaan Mesej

Penulis:Ninabadass, Dicipta: 2022-04-27 10:55:50, Dikemas kini: 2022-04-27 10:57:37

Penyelesaian untuk Mendapatkan Docker Http Permintaan Mesej

Apabila menguji dan menyahpasang kod strategi, atau menjalankan bot di pasaran sebenar, antara muka platform sering dilaporkan dengan kesilapan. Pada masa ini, anda perlu menyoal dokumentasi API antara muka platform, mencari maklumat pelaporan ralat yang berkaitan, dan selalu perlu memberikan mesej permintaan kesilapan, ketika menyoal perkhidmatan teknikal API platform, untuk menganalisis penyebab ralat.

Jika anda tidak dapat melihat maklumat mesej, ia akan menjadi sukar untuk mencari masalah.

1. Gunakan Python Scapy (pengambilan pakej) untuk mencetak mesej permintaan yang dihantar

Pertama, pasangscapy.

pip3 install scapy 

Kemudian, buat 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 mencipta bot yang menggunakan strategi, dan bot akan menangkap pakej http yang dihantar oleh pelayan docker (https tidak dapat menangkap pakej, dan kami mempunyai beberapa pemprosesan untuk itu).

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

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

Maklumat yang dicetak oleh bot menangkap pakej:img

Kita boleh menyalin mesej permintaan dan melihat: 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 telah diubahsuai untuk menangkap pakej, yang boleh diabaikan; yang betul harusHost: www.okex.com. Anda boleh melihat pautan dalam mesej permintaan adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, yang akan meminta data pasaran kontrak kekal crypto-margined (BTC).

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

Anda boleh melihat laluan permintaan adalah:/api/swap/v3/order. Kunci Akses yang disahkan:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(untuk demo, bukan KEY sebenar) Tandatangan permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=Kata laluan API KEY:abc123(untuk demo) Data Badan yang diminta:{"aaa":"111","bbb":"222"}.

Oleh itu, kita boleh memerhatikan mesej permintaan, dan menganalisis penyebab kesilapan yang ditemui oleh antara muka.

2. Permintaan Pendengar Lokal

Penyelesaian kedua, tanpa membuat bot, adalah menggunakanNetcatyang datang dengan sistem Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinDengar permintaan dan cetak mesej.

Dalam terminal, gunakan arahannc -l 8080untuk menjalankan Netcat.

Seperti yang ditunjukkan dalam gambar:img

Begitu juga, kita menggunakan docker pada mesin ini, dan kemudian dalam alat debugging, gunakan kod berikut untuk menghantar permintaan.

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

Mesej permintaan POST dicetak pada terminal:img

Mesej permintaan GET dicetak pada terminal:img


Lebih lanjut