Dalam ujian, debugging kod dasar, semasa menjalankan bot pada cakera sebenar, sering terdapat laporan kesalahan antara muka bursa, ketika ini untuk mendapatkan dokumentasi API antara muka bursa, untuk mendapatkan maklumat pelaporan yang berkaitan, ketika menghubungi pelanggan teknikal API bursa, selalu perlu memberikan laporan permintaan ketika pelaporan, untuk menganalisis penyebab pelaporan.
Dalam artikel ini, kita akan membincangkan dua penyelesaian.
Mulakan dengan memasangscapy
Modul
pip3 install scapy
Kemudian, buatlah satu 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 mencipta bot yang menggunakan dasar ini, yang akan merampas pakej http yang dikeluarkan oleh pelayan hostsnya (https tidak dapat merampas ini).
Apabila bot ini berjalan, anda boleh menggunakan alat debugging untuk menghantar permintaan, dan bot itu akan menangkapnya. Dalam alat debugging, anda 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()
}
Berita yang dicetak oleh robot rampok:
Kita boleh menyalin dan lihat berita: Berita yang diminta oleh 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.com
Adakah kita boleh mengabaikan, dan yang betul adalah bahawa kita harus mengambil apa yang kita mahu?Host: www.okex.com
Anda boleh lihat pautan di dalam surat permintaan:/api/swap/v3/instruments/BTC-USD-SWAP/ticker
Pada bulan Disember lalu, pihaknya telah membuat satu laporan yang menunjukkan bahawa mereka telah meminta data mengenai pasaran kontrak kekal di tempat BTC.
POST meminta laporan:
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"}
Di sini, anda boleh melihat laluan permintaan:/api/swap/v3/order
Saya tidak tahu apa yang berlaku.
Kunci akses yang disahkan:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4
(Demonstrasi, bukan KEY sebenar)
Tanda tangan untuk permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
API KEY Kunci Rahsia Passphrase:abc123
(Demonstrasi)
Data badan yang diminta:{"aaa":"111","bbb":"222"}
。
Dengan cara ini, anda boleh melihat mesej permintaan dan menganalisis mengapa permintaan antarmuka mengalami kesalahan.
Cara kedua, tanpa perlu membina robot, menggunakan komputer Apple Mac dengan tali pinggang.Netcat
: https://baike.baidu.com/item/Netcat/9952751?fr=aladdinOleh itu, saya tidak mahu mengkritik mereka.
Dalam terminal, gunakan arahannc -l 8080
, yang dijalankan oleh Netcat.
Gambar berikut:
Begitu juga, kita menggunakan hoster di dalam mesin, dan kemudian dalam alat debugging, menggunakan kod berikut untuk menghantar permintaan.
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()
}
POST permintaan mesej yang dicetak di terminal:
Mesej permintaan GET yang dicetak di terminal: