Beim Testen und Debuggen des Strategiecodes oder beim Ausführen des Roboters auf dem echten Bot meldet die Exchange-Schnittstelle häufig Fehler. Gehen Sie zu diesem Zeitpunkt zum Exchange-Interface-API-Dokument, um die entsprechenden Fehlerinformationen abzufragen. Beim Abrufen des Exchange-API-Technischen Kundenservice müssen Sie immer die Anforderungsnachricht bereitstellen, wenn der Fehler gemeldet wird, um die Ursache des Fehlers zu analysieren.
In diesem Artikel werden wir zwei Lösungen zusammen diskutieren.
Zuerst installieren wir diescapy
Modul
pip3 install scapy
Dann erstellen wir eine Python-Strategie:
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")
Dann erstellen wir einen Roboter, der die Strategie verwendet, und dieser Bot wird http-Pakete aufnehmen, die vom Server des Docker-Anbieters gesendet werden, zu dem er gehört (die https nicht aufnehmen kann, haben wir einige Lösungen dafür).
Führen Sie den Paket-Catching-Roboter aus, und dann können Sie das Debugging-Tool verwenden, um Anfragen zu senden, damit der Roboter Pakete fangen kann.
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()
}
Informationen, die vom Paketfangroboter gedruckt werden:
Wir können die Nachricht kopieren und sehen: GET-Anforderungsnachricht:
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
ist, was wir geändert, um in der Lage zu sein, das Paket zu fangen, können Sie es ignorieren, sollte die richtige seinHost: www.okex.com
Wir können sehen, dass der Link in der Anforderungsnachricht lautet:/api/swap/v3/instruments/BTC-USD-SWAP/ticker
, ist es, die BTC native dauerhafte Vertragsmarktdaten anzufordern.
Nachricht zur POST-Anfrage:
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"}
Wir können sehen, dass der Anforderungspfad:/api/swap/v3/order
- Ich weiß.
Zugriffsschlüssel überprüft:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4
(Nur zur Demonstration, nicht der eigentliche Schlüssel)
Unterschrift des Antrags:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
API KEY geheimer Schlüssel Passphrase:abc123
(nur zur Demonstration)
Erforderte Daten des Körpers:{"aaa":"111","bbb":"222"}
。
Auf diese Weise können wir die Anforderungsnachricht beobachten und den Grund analysieren, warum die Schnittstellenanfrage auf einen Fehler trifft.
Die zweite Methode erfordert nicht, einen Roboter zu erstellen, verwendet nur dieNetcat
Das kommt mit dem Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinÜberwachen Sie die Anfragen und drucken Sie Nachrichten.
Auf dem Terminal, laufen Sie Netcat mit dem Befehlnc - l 8080
.
Wie auf dem Bild unten:
Ähnlich implementieren wir einen Docker auf unserem Computer und verwenden dann den folgenden Code, um Anfragen in das Debug-Tool zu senden.
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()
}
Die auf dem Terminal gedruckte POST-Anforderungsnachricht:
Die auf dem Terminal gedruckte GET-Anforderungsmeldung: