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

Auteur:FMZ~Lydia, Créé: 2022-11-10 20:49:38, Mis à jour: 2023-09-14 20:36:06

Solution to Get the http Request Message Sent by the Docker

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:Solution to Get the http Request Message Sent by the Docker

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 
We can see the link in the request message is: ```/api/swap/v3/instruments/BTC-USD-SWAP/ticker```, it is to request the BTC native perpetual contract market data.

POST request message:

Le dépôt /api/swap/v3/ordre HTTP/1.1 L'hôte est www.baidu.com L'agent utilisateur: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/35.0.1916.153 Safari/537.36 Le contenu: 25 Type de contenu: application/json; jeu de caractères=UTF-8 OK-Accès-Clé: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 Ok-Access-Passphrase: abc123 Il est temps de passer à autre chose Si vous avez un problème avec le système, vous pouvez le résoudre en cliquant sur le bouton de commande. Ok-Access-Timestamp: 2020-09-23T08:43:49.906Z Accepter le codage: gzip

Je ne sais pas.

We can see the request path is: ```/api/swap/v3/order```.
Verified Access Key: ```d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4``` (For demonstration only, not the real KEY)
Signature of the request: ```h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=```
API KEY secret key--Passphrase: ```abc123``` (For demonstration only)
Requested Body data: ```{"aaa":"111","bbb":"222"}```。

In this way, we can observe the request message and analyze the reason why the interface request encounters an error.

### 2. Local listening request
The second method does not need to create a robot, just uses the ```Netcat``` that comes with the Mac: https://baike.baidu.com/item/Netcat/9952751?fr=aladdin. Monitor the requests and print messages.

On the terminal, run Netcat with the command ```nc - l 8080```.

As the picture below:
![Solution to Get the http Request Message Sent by the Docker](/upload/asset/28d7f2156cdb996092a8a.png)

Similarly, we deploy a docker on our computer, and then use the following code to send requests in the debugging tool.

fonction principale exchange.SetBase(http://127.0.0.1:8080) // Ici, nous changeons l'adresse de base à la machine locale, le port 8080, et Netcat peut obtenir la demande // demande de POST L'échange.IO ((api, POST, /api/swap/v3/order, aaa=111&bbb=222)

// GET request
exchange.SetContractType("swap")
exchange.GetTicker()

Je ne sais pas. ` Le message de demande POST imprimé sur le terminal:Solution to Get the http Request Message Sent by the Docker

Le message de demande GET imprimé sur le terminal:Solution to Get the http Request Message Sent by the Docker


En savoir plus