Lors du test et du débogage du code de stratégie, ou de l'exécution du bot sur un marché réel, l'interface de la plate-forme est souvent signalée avec des erreurs. À ce moment-là, vous devez interroger la documentation de l'API de l'interface de la plate-forme, rechercher les informations de rapport d'erreur pertinentes et toujours fournir les messages de demande d'erreurs, lors de la requête du service technique de l'API de la plate-forme, pour analyser les causes des erreurs.
Si vous ne pouvez pas voir les informations du message, il sera difficile de trouver les problèmes.
Tout d'abord, installezscapy
.
pip3 install scapy
Ensuite, créez une stratégie 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")
Ensuite, créez un bot qui utilise la stratégie, et le bot va capturer les paquets http envoyés par le serveur docker (https ne peut pas attraper les paquets, et nous avons un certain traitement pour cela).
Exécutez le bot de capture de paquets, et ensuite vous pouvez utiliser l'outil de débogage pour envoyer des requêtes pour laisser le bot capturer des paquets.
function main(){
// The base address should be set to the address of other http protocols. If the address of a platform is not set, it is generally https, so the packet 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()
}
Les informations imprimées par le bot de capture de paquets:
Nous pouvons copier les messages de demande et jeter un coup d'œil: Message de demande 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
est ce que nous avons modifié afin d'attraper les paquets, qui peuvent être ignorés; la bonne devrait êtreHost: www.okex.com
Je suis désolée.
Vous pouvez voir le lien dans le message de demande est:/api/swap/v3/instruments/BTC-USD-SWAP/ticker
, qui est de demander les données du marché des contrats perpétuels crypto-marginés (BTC).
Message de demande 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"}
Vous pouvez voir que le chemin de demande est:/api/swap/v3/order
Je suis désolée.
Clé d' accès vérifiée:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4
(pour la démo, pas la vraie clé)
Signature de la présente demande:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
Le mot de passe de l' API KEY:abc123
(pour la démo)
Données de l'organisme requis:{"aaa":"111","bbb":"222"}
.
Ainsi, nous pouvons observer les messages de demande et analyser les causes des erreurs rencontrées par l'interface.
La deuxième solution, sans créer de bot, est d'utiliser leNetcat
qui est fourni avec le système Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinÉcoutez les demandes et imprimez les messages.
Dans le terminal, utiliser la commandenc -l 8080
pour gérer Netcat.
Comme le montre l'image:
De même, nous déployons un docker sur cette machine, puis dans l'outil de débogage, utilisez le code suivant pour envoyer une demande.
function main(){
exchange.SetBase("http://127.0.0.1:8080") // here we modify the base address to the local, port 8080, and then Netcat can listen to the requests
// POST request
exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
// GET request
exchange.SetContractType("swap")
exchange.GetTicker()
}
Le message de demande POST imprimé sur le terminal:
Le message de demande GET imprimé sur le terminal: