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

El autor:- ¿ Por qué?, Creado: 2022-11-10 20:49:38, Actualizado: 2023-09-14 20:36:06

img

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

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 

Host: www.baidu.comes lo que hemos cambiado con el fin de ser capaz de atrapar el paquete, usted puede ignorarlo, el correcto debe serHost: www.okex.comPodemos ver que el enlace en el mensaje de solicitud es:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, es para solicitar los datos del mercado de contratos perpetuos nativos BTC.

Mensaje de solicitud de 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"}

Podemos ver que la ruta de solicitud es:/api/swap/v3/order¿ Qué pasa? Clave de acceso verificada:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Sólo para demostración, no la verdadera llave) Firma de la solicitud:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY clave secreta Frase de contraseña:abc123(Sólo para demostración) Datos del organismo solicitado:{"aaa":"111","bbb":"222"}

De esta manera, podemos observar el mensaje de solicitud y analizar la razón por la que la solicitud de interfaz se encuentra con un error.

2. Solicitud de escucha local

El segundo método no necesita crear un robot, sólo utiliza elNetcatque viene con el Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinMonitorear las solicitudes e imprimir mensajes.

En la terminal, ejecute Netcat con el comandonc - l 8080.

Como la imagen de abajo:img

Del mismo modo, desplegamos un docker en nuestro ordenador, y luego usamos el siguiente código para enviar solicitudes en la herramienta de depuración.

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

El mensaje de solicitud POST impreso en la terminal:img

El mensaje de solicitud GET impreso en el terminal:img


Más.