Solución para obtener el mensaje de solicitud http enviado por el Docker

El autor:FMZ~Lydia, Creado: 2022-11-10 20:49:38, Actualizado: 2023-09-14 20:36:06

Solution to Get the http Request Message Sent by the Docker

Al probar y depurar el código de la estrategia, o ejecutar el robot en el bot real, la interfaz de intercambio a menudo reporta errores. En este momento, vaya al documento de la interfaz de intercambio API para consultar la información de error relevante. Al consultar el servicio técnico al cliente de la API de intercambio, siempre debe proporcionar el mensaje de solicitud cuando se reporte el error para analizar la causa del error.

En este momento, no hay manera de encontrar problemas sin ver la información del mensaje.

1. Utilizando la biblioteca scapy de Python para tomar paquetes e imprimir los mensajes de solicitud enviados

Primero instalamos elscapymódulo

pip3 install scapy 

Luego creamos una estrategia de 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")

Luego creamos un robot que utiliza la estrategia, y ese bot captará los paquetes http enviados desde el servidor del proveedor de docker al que pertenece (que https no puede capturar tendremos algunas soluciones de esto).

Ejecutar el robot de captura de paquetes, y luego se puede utilizar la herramienta de depuración para enviar solicitudes para que el robot captura paquetes.

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

Información impresa por el robot de captura de paquetes:Solution to Get the http Request Message Sent by the Docker

Podemos copiar y ver el mensaje: Mensaje de solicitud 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:

Posibilidad de transferencia /api/swap/v3/orden HTTP/1.1 Anfitrión: www.baidu.com Agente de usuario: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/35.0.1916.153 Safari/537.36 Contenido-Llevo: 25 Tipo de contenido: aplicación/json; conjunto de caracteres=UTF-8 Ok-Access-Key: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 Ahora tienes que irte. Ok-Acceso-Palabra de acceso: abc123 - Sí, sí, sí. - ¿Qué es eso? ¿Qué es eso? Ok-Access-Timestamp: 2020-09-23T08:43:49.906Z Aceptar el código: gzip

¿Por qué no lo haces?

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.

Función principal exchange.SetBase(http://127.0.0.1:8080) // Aquí, cambiamos la dirección de la base a la máquina local, puerto 8080, y Netcat puede obtener la solicitud // POST petición En el caso de las operaciones de intercambio, las operaciones de intercambio se realizan en el marco de un sistema de intercambio de datos.

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

¿ Por qué? ` El mensaje de solicitud POST impreso en la terminal:Solution to Get the http Request Message Sent by the Docker

El mensaje de solicitud GET impreso en el terminal:Solution to Get the http Request Message Sent by the Docker


Más contenido