Solusi untuk Mendapatkan Docker Http Request Message

Penulis:Ninabadass, Dibuat: 2022-04-27 10:55:50, Diperbarui: 2022-04-27 10:57:37

Solusi untuk Mendapatkan Docker Http Request Message

Saat menguji dan men-debug kode strategi, atau menjalankan bot di pasar nyata, antarmuka platform sering dilaporkan dengan kesalahan. Pada saat ini, Anda perlu menanyakan dokumentasi API antarmuka platform, mencari informasi pelaporan kesalahan yang relevan, dan selalu perlu memberikan pesan permintaan kesalahan, ketika menanyakan layanan teknis API platform, untuk menganalisis penyebab kesalahan.

Jika Anda tidak dapat melihat informasi pesan, akan sulit untuk menemukan masalah.

1. Gunakan Python Scapy (packet capture) untuk mencetak pesan permintaan yang dikirim

Pertama, installscapy.

pip3 install scapy 

Kemudian, buatlah 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 buat bot yang menggunakan strategi, dan bot akan menangkap paket http yang dikirim oleh server docker (https tidak dapat menangkap paket, dan kami memiliki beberapa pemrosesan untuk itu).

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

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

Informasi yang dicetak oleh bot menangkap paket:img

Kita bisa menyalin pesan permintaan dan melihat: 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 telah dimodifikasi untuk menangkap paket, yang dapat diabaikan; yang benar harusHost: www.okex.comAku tidak tahu. Anda dapat melihat link dalam pesan permintaan adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, yang akan meminta data pasar kontrak perpetual crypto-margined (BTC).

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

Anda dapat melihat jalur permintaan adalah:/api/swap/v3/orderAku tidak tahu. Kunci akses yang diverifikasi:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(untuk demo, bukan KEY nyata) Tanda tangan permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=Kata sandi API KEY:abc123(untuk demo) Data Badan yang diminta:{"aaa":"111","bbb":"222"}.

Dengan demikian, kita dapat mengamati pesan permintaan, dan menganalisis penyebab kesalahan yang dihadapi oleh antarmuka.

2. Permintaan dari Pendengar Lokal

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

Di terminal, gunakan perintahnc -l 8080untuk menjalankan Netcat.

Seperti yang ditunjukkan pada gambar:img

Demikian pula, kita menyebarkan docker pada mesin ini, dan kemudian di alat debugging, gunakan kode berikut untuk mengirim 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()
}

POST pesan permintaan dicetak di terminal:img

Pesan permintaan GET dicetak di terminal:img


Lebih banyak