Soluciones para obtener el mensaje de solicitud HTTP de Docker

El autor:No lo sé., Creado: 2022-04-27 10:55:50, Actualizado: 2022-04-27 10:57:37

Soluciones para obtener el mensaje de solicitud HTTP de Docker

Al probar y depurar el código de estrategia, o ejecutar el bot en un mercado real, la interfaz de la plataforma a menudo se informa con errores. En este momento, debe consultar la documentación de la API de la interfaz de la plataforma, buscar la información de informes de errores relevante y siempre debe proporcionar los mensajes de solicitud de errores, al consultar el servicio técnico de la API de la plataforma, para analizar las causas de los errores.

Si no puede ver la información del mensaje, será difícil encontrar los problemas.

1. Use Python Scapy (captura de paquetes) para imprimir el mensaje de solicitud enviado

Primero, instalescapy.

pip3 install scapy 

Luego, crea 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 crear un bot que utiliza la estrategia, y el bot capturará los paquetes http enviados por el servidor docker (https no puede captar los paquetes, y tenemos un poco de procesamiento para eso).

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

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

La información impresa por el bot de captura de paquetes:img

Podemos copiar los mensajes de solicitud y echar un vistazo: 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 modificado con el fin de capturar los paquetes, que pueden ser ignorados; el correcto debe serHost: www.okex.com¿ Qué pasa? Puede ver el enlace en el mensaje de solicitud es:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, que es solicitar los datos del mercado de contratos perpetuos con criptomonedas marginales (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"}

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

Por lo tanto, podemos observar los mensajes de solicitud y analizar las causas de los errores encontrados por la interfaz.

2. Solicitud del oyente local

La segunda solución, sin crear un bot, es utilizar elNetcatque viene con el sistema Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinEscucha las solicitudes y imprime los mensajes.

En el terminal, utilice el comandonc -l 8080para ejecutar Netcat.

Como se muestra en la imagen:img

Del mismo modo, desplegamos un docker en esta máquina, y luego en la herramienta de depuración, usar el siguiente código para enviar una solicitud.

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

El mensaje de solicitud POST impreso en la terminal:img

El mensaje de solicitud GET impreso en el terminal:img


Más.