Solution pour obtenir le message de demande http envoyé par le Docker

Auteur:Je ne sais pas., Créé: 2022-11-10 20:49:38, Mis à jour: 2023-09-14 20:36:06

img

Lors du test et du débogage du code de stratégie, ou lors de l'exécution du robot sur le vrai bot, l'interface d'échange signale souvent des erreurs. À ce moment-là, accédez au document API de l'interface d'échange pour interroger les informations d'erreur pertinentes. Lorsque vous consultez le service client technique de l'API d'échange, vous devez toujours fournir le message de demande lorsque l'erreur est signalée pour analyser la cause de l'erreur.

À l'heure actuelle, il n'y a aucun moyen de trouver des problèmes sans voir les informations du message.

1. Utiliser la bibliothèque scapy de Python pour saisir les paquets et imprimer les messages de demande envoyés

Tout d'abord, nous installons lescapyle module

pip3 install scapy 

Puis nous créons 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, nous créons un robot qui utilise la stratégie, et ce bot va attraper les paquets http envoyés depuis le serveur du fournisseur de docker auquel il appartient (que https ne peut pas attraper nous aurons quelques solutions à cela).

Exécutez le robot de capture de paquets, puis vous pouvez utiliser l'outil de débogage pour envoyer des demandes pour laisser le robot capturer des paquets.

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()
}

Informations imprimées par le robot de capture de colis:img

On peut copier et voir le 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.comest ce que nous avons changé afin d'être en mesure d'attraper le paquet, vous pouvez l'ignorer, le bon devrait êtreHost: www.okex.comOn peut voir que le lien dans le message de demande est:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, il est de demander les données du marché des contrats perpétuels natifs 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"}

On peut 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émonstration seulement, pas la vraie CLAVE) Signature de la demande:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY clé secrète Passphrase:abc123(uniquement à titre de démonstration) Données de l'organisme requis:{"aaa":"111","bbb":"222"}

De cette façon, nous pouvons observer le message de demande et analyser la raison pour laquelle la demande d'interface rencontre une erreur.

2. Demande d'écoute locale

La deuxième méthode n'a pas besoin de créer un robot, il suffit d'utiliserNetcatqui vient avec le Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinSurveillez les demandes et imprimez les messages.

Sur le terminal, exécutez Netcat avec la commandenc - l 8080.

Comme la photo ci-dessous:img

De même, nous déployons un docker sur notre ordinateur, puis utilisons le code suivant pour envoyer des requêtes dans l'outil de débogage.

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()
}

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

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


Plus de