Apabila menguji dan menyahsalahkan kod strategi, atau menjalankan robot pada bot sebenar, antara muka pertukaran sering melaporkan ralat. Pada masa ini, pergi ke dokumen API antara muka pertukaran untuk menanyakan maklumat ralat yang berkaitan. Apabila berunding dengan perkhidmatan pelanggan teknikal API pertukaran, anda selalu perlu memberikan mesej permintaan apabila ralat dilaporkan untuk menganalisis penyebab ralat.
Pada masa ini, tidak ada cara untuk mencari masalah tanpa melihat maklumat mesej.
Pertama kita memasangscapy
Modul
pip3 install scapy
Kemudian kita mencipta 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 kita mencipta robot yang menggunakan strategi, dan bot itu akan menangkap pakej http yang dihantar dari pelayan penyedia docker yang dimiliki (yang https tidak dapat menangkap kita akan mempunyai beberapa penyelesaian ini).
Jalankan robot yang menangkap pakej, dan kemudian anda boleh menggunakan alat debugging untuk menghantar permintaan untuk membiarkan robot menangkap pakej.
function main(){
// The base address should be set as the address of other http protocols. If the exchange address is not set, it is generally https. In this case, packets 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 robot menangkap pakej:
Kita boleh menyalin 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.com
adalah apa yang kita berubah untuk dapat menangkap pakej, anda boleh mengabaikannya, yang betul harusHost: www.okex.com
Kita boleh lihat pautan dalam mesej permintaan adalah:/api/swap/v3/instruments/BTC-USD-SWAP/ticker
, ia adalah untuk meminta data pasaran kontrak kekal BTC asli.
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"}
Kita boleh lihat laluan permintaan adalah:/api/swap/v3/order
.
Kunci Akses Diperiksa:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4
(Untuk demonstrasi sahaja, bukan kunci sebenar)
Tanda tangan permintaan:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
API KEY kunci rahsiaabc123
(Hanya untuk demonstrasi)
Data Badan yang diminta:{"aaa":"111","bbb":"222"}
。
Dengan cara ini, kita boleh memerhatikan mesej permintaan dan menganalisis sebab mengapa permintaan antara muka menghadapi ralat.
Kaedah kedua tidak perlu membuat robot, hanya menggunakanNetcat
yang datang dengan Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdin- Memantau permintaan dan cetak mesej.
Pada terminal, jalankan Netcat dengan perintahnc - l 8080
.
Seperti gambar di bawah:
Begitu juga, kita menggunakan docker pada komputer kita, dan kemudian menggunakan kod berikut untuk menghantar permintaan dalam alat debugging.
function main(){
exchange.SetBase("http://127.0.0.1:8080") // Here, we change the base address to the local machine, port 8080, and Netcat can get the request
// 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 di terminal:
Mesej permintaan GET dicetak di terminal: