avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Dicipta dalam: 2020-09-23 16:24:42, dikemas kini pada: 2023-09-27 19:37:55
comments   0
hits   1510

Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Semasa menguji dan menyahpepijat kod strategi, atau menjalankan robot dalam perdagangan sebenar, anda sering menghadapi ralat yang dilaporkan oleh antara muka pertukaran Pada masa ini, anda perlu menanyakan dokumentasi API antara muka pertukaran dan maklumat ralat yang berkaitan Apabila merujuk kepada perkhidmatan pelanggan teknikal pertukaran , anda sentiasa perlu memberikan mesej Permintaan apabila ralat dilaporkan, digunakan untuk menganalisis punca ralat.

Pada masa ini, jika anda tidak dapat melihat maklumat mesej, anda tidak akan tahu di mana hendak mula mencari masalah Dalam artikel ini, kami akan membincangkan dua penyelesaian.

1. Gunakan perpustakaan scapy Python untuk menangkap paket dan mencetak mesej permintaan yang dihantar

Pasang pertamascapyModul

pip3 install scapy 

Kemudian buat dasar 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 dihantar oleh pelayan hos (Terdapat beberapa penyelesaian untuk kegagalan menangkap paket https.)

Jalankan robot penangkapan paket ini, dan kemudian anda boleh menggunakan alat penyahpepijatan untuk menghantar permintaan untuk membenarkan robot menangkap paket. Dalam penyahpepijat kami menulis kod untuk menghantar 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()
}

Maklumat yang dicetak oleh robot penangkapan paket: Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Kita boleh menyalinnya 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.comIni adalah untuk kita menangkap pengubahsuaian pakej, anda boleh mengabaikannya, yang betul sepatutnyaHost: www.okex.com Anda boleh melihat bahawa pautan dalam mesej permintaan ialah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, adalah untuk meminta data pasaran kontrak kekal berasaskan 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 bahawa laluan permintaan ialah:/api/swap/v3/order。 Kunci akses untuk pengesahan:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (Untuk tujuan demonstrasi sahaja, bukan KUNCI sebenar) Tandatangan permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= Frasa Laluan API KEY:abc123 (Untuk demonstrasi) Permintaan data Badan:{"aaa":"111","bbb":"222"}

Dengan cara ini, anda boleh melihat mesej permintaan dan menganalisis sebab permintaan antara muka mengalami ralat.

2. Permintaan pemantauan tempatan

Kaedah kedua tidak memerlukan penciptaan robot Gunakan terbina dalamNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Pantau permintaan dan cetak mesej.

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

Seperti yang ditunjukkan dalam rajah: Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Begitu juga, kami menggunakan hos pada mesin tempatan, dan kemudian menggunakan kod berikut untuk menghantar permintaan dalam alat nyahpepijat.

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

Mesej permintaan POST yang dicetak pada terminal: Dapatkan penyelesaian menghantar mesej permintaan http oleh hos

Mesej permintaan GET yang dicetak pada terminal: Dapatkan penyelesaian menghantar mesej permintaan http oleh hos