
Lors du test et du débogage des codes de stratégie ou de l’exécution de robots dans le cadre d’un trading réel, vous rencontrez souvent des erreurs signalées par l’interface d’échange. À ce stade, vous devez interroger la documentation de l’API de l’interface d’échange et les informations d’erreur associées. Lors de la consultation du service client technique de l’API d’échange , vous devez toujours fournir un message de demande lorsqu’une erreur est signalée, utilisé pour analyser la cause de l’erreur.
À ce stade, si vous ne parvenez pas à voir les informations du message, vous ne saurez pas par où commencer pour trouver le problème. Dans cet article, nous allons discuter de deux solutions.
Première installationscapyModules
pip3 install scapy
Créez ensuite une politique 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")
Créez ensuite un robot utilisant cette stratégie, qui capturera les paquets http envoyés par le serveur de l’hôte auquel il appartient (il existe quelques solutions pour l’échec de capture https).
Exécutez ce robot de capture de paquets, puis vous pouvez utiliser l’outil de débogage pour envoyer des requêtes permettant au robot de capturer des paquets. Dans le débogueur, nous écrivons le code pour envoyer la requête.
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()
}
Informations imprimées par le robot de capture de paquets :

Nous pouvons le copier et jeter un œil au message : 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.comCeci nous permet de détecter la modification du package, vous pouvez l’ignorer, la bonne devrait êtreHost: www.okex.com
Vous pouvez voir que le lien dans le message de demande est :/api/swap/v3/instruments/BTC-USD-SWAP/ticker, consiste à demander les données du marché des contrats perpétuels basés sur le BTC.
Message de requête 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 la requête est :/api/swap/v3/order。
Clé d’accès pour la vérification :d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (À des fins de démonstration uniquement, ce n’est pas une vraie CLÉ)
Signature de cette demande :h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
Clé API Mot de passe :abc123 (Pour démonstration)
Données du corps de la requête :{"aaa":"111","bbb":"222"}。
De cette façon, vous pouvez observer le message de demande et analyser la raison pour laquelle la demande d’interface a rencontré une erreur.
La deuxième méthode ne nécessite pas la création d’un robot. Utilisez leNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Surveiller les demandes et imprimer les messages.
Dans le terminal, utilisez la commandenc -l 8080, exécutez Netcat.
Comme le montre la figure :

De même, nous déployons un hôte sur la machine locale, puis utilisons le code suivant pour envoyer une demande dans l’outil de débogage.
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()
}
Le message de requête POST imprimé sur le terminal :

Le message de requête GET imprimé sur le terminal :
