
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.
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:

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.
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:

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:

Pesan permintaan GET yang dicetak pada terminal:
