avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Obtenez la solution de l'envoi d'un message de requête http par l'hôte

Créé le: 2020-09-23 16:24:42, Mis à jour le: 2023-09-27 19:37:55
comments   0
hits   1510

Obtenez la solution de l’envoi d’un message de requête http par l’hôte

Obtenez la solution de l’envoi d’un message de requête http par l’hôte

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.

1. Utilisez la bibliothèque scapy de Python pour capturer le paquet et imprimer le message de demande envoyé

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 : Obtenez la solution de l’envoi d’un message de requête http par l’hôte

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.

2. Demande de surveillance locale

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 : Obtenez la solution de l’envoi d’un message de requête http par l’hôte

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 : Obtenez la solution de l’envoi d’un message de requête http par l’hôte

Le message de requête GET imprimé sur le terminal : Obtenez la solution de l’envoi d’un message de requête http par l’hôte