Solution pour obtenir le message de demande Docker Http

Auteur:Je suis désolée., Créé: 2022-04-27 10:55:50, Mis à jour: 2022-04-27 10:57:37

Solution pour obtenir le message de demande Docker Http

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.

1. Utilisez Python Scapy (capture de paquets) pour imprimer le message de demande envoyé

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:img

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.comest ce que nous avons modifié afin d'attraper les paquets, qui peuvent être ignorés; la bonne devrait êtreHost: www.okex.comJe 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/orderJe 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.

2. Demande de l'auditeur local

La deuxième solution, sans créer de bot, est d'utiliser leNetcatqui 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 8080pour gérer Netcat.

Comme le montre l'image:img

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:img

Le message de demande GET imprimé sur le terminal:img


Plus de