avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Dapatkan solusi pengiriman pesan permintaan http oleh host

Dibuat di: 2020-09-23 16:24:42, diperbarui pada: 2023-09-27 19:37:55
comments   0
hits   1510

Dapatkan solusi pengiriman pesan permintaan http oleh host

Dapatkan solusi pengiriman pesan permintaan http oleh host

Saat menguji dan men-debug kode strategi, atau menjalankan robot dalam perdagangan nyata, Anda sering mengalami kesalahan yang dilaporkan oleh antarmuka bursa. Saat ini, Anda perlu menanyakan dokumentasi API antarmuka bursa dan informasi kesalahan terkait. Saat berkonsultasi dengan layanan pelanggan teknis API bursa , Anda selalu perlu memberikan pesan Permintaan saat kesalahan dilaporkan, yang digunakan untuk menganalisis penyebab kesalahan.

Saat ini, jika Anda tidak dapat melihat informasi pesan, Anda tidak akan tahu harus mulai dari mana untuk menemukan masalahnya. Dalam artikel ini, kami akan membahas dua solusi.

1. Gunakan pustaka scapy Python untuk menangkap paket dan mencetak pesan permintaan yang dikirim

Instalasi pertamascapyModul

pip3 install scapy 

Kemudian buat kebijakan 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 robot yang menggunakan strategi ini. Robot akan menangkap paket http yang dikirim oleh server host. (Ada beberapa solusi untuk kegagalan menangkap paket https.)

Jalankan robot penangkap paket ini, lalu Anda dapat menggunakan alat debugging untuk mengirim permintaan agar robot menangkap paket. Dalam debugger kita menulis kode untuk mengirim permintaan.

function main(){
    // 要把基地址设置为其它http协议的地址,如果不设置交易所的地址一般都是https,这样是抓不到包的
    exchange.SetBase("http://www.baidu.com")    
    
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Informasi yang dicetak oleh robot penangkap paket: Dapatkan solusi pengiriman pesan permintaan http oleh host

Kita dapat menyalinnya dan melihat pesannya: DAPATKAN pesan permintaan:

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.comIni untuk kita menangkap modifikasi paket, Anda dapat mengabaikannya, yang benar seharusnyaHost: www.okex.com Anda dapat melihat bahwa tautan dalam pesan permintaan tersebut adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, adalah untuk meminta data pasar kontrak abadi berbasis BTC.

Pesan 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 dapat melihat bahwa jalur permintaannya adalah:/api/swap/v3/order。 Kunci akses untuk verifikasi:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (Hanya untuk tujuan demonstrasi, bukan KUNCI yang sebenarnya) Tanda tangan permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= Frasa Sandi KUNCI API:abc123 (Untuk demonstrasi) Permintaan data Badan:{"aaa":"111","bbb":"222"}

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

2. Permintaan pemantauan lokal

Metode kedua tidak memerlukan pembuatan robot. Gunakan built-inNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Memantau permintaan dan mencetak pesan.

Di terminal, gunakan perintahnc -l 8080, jalankan Netcat.

Seperti yang ditunjukkan pada gambar: Dapatkan solusi pengiriman pesan permintaan http oleh host

Demikian pula, kami menyebarkan host pada mesin lokal, lalu menggunakan kode berikut untuk mengirim permintaan di alat debugging.

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // 这里把基地址改为本机,端口8080,Netcat 就可以监听到请求了
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Pesan permintaan POST yang dicetak pada terminal: Dapatkan solusi pengiriman pesan permintaan http oleh host

Pesan permintaan GET yang dicetak pada terminal: Dapatkan solusi pengiriman pesan permintaan http oleh host