avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Obtenga la solución para enviar un mensaje de solicitud http por parte del host

Creado el: 2020-09-23 16:24:42, Actualizado el: 2023-09-27 19:37:55
comments   0
hits   1510

Obtenga la solución para enviar un mensaje de solicitud http por parte del host

Obtenga la solución para enviar un mensaje de solicitud http por parte del host

Al probar y depurar códigos de estrategia o ejecutar robots en operaciones reales, a menudo se encuentran errores informados por la interfaz de intercambio. En este momento, debe consultar la documentación de la API de la interfaz de intercambio y la información de error relacionada. Al consultar el servicio técnico de atención al cliente de la API de intercambio Siempre es necesario proporcionar un mensaje de solicitud cuando se informa un error, que se utiliza para analizar la causa del error.

En este momento, si no puede ver la información del mensaje, no sabrá por dónde empezar para encontrar el problema. En este artículo, analizaremos dos soluciones.

1. Utilice la biblioteca scapy de Python para capturar el paquete e imprimir el mensaje de solicitud enviado

Primera instalaciónscapyMódulos

pip3 install scapy 

Luego crea una política 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, crea un robot que utilice esta estrategia. El robot capturará los paquetes http enviados por el servidor del host. (Existen algunas soluciones para el error de captura de paquetes https).

Ejecute este robot de captura de paquetes y luego podrá usar la herramienta de depuración para enviar solicitudes para permitir que el robot capture paquetes. En el depurador escribimos el código para enviar la solicitud.

function main(){
    // 要把基地址设置为其它http协议的地址,如果不设置交易所的地址一般都是https,这样是抓不到包的
    exchange.SetBase("http://www.baidu.com")    
    
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Información impresa por el robot de captura de paquetes: Obtenga la solución para enviar un mensaje de solicitud http por parte del host

Podemos copiarlo y echar un vistazo al 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.comEsto es para que detectemos la modificación del paquete, puede ignorarla, la correcta debería serHost: www.okex.com Puedes ver que el enlace en el mensaje de solicitud es:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, es solicitar los datos del mercado de contratos perpetuos basados ​​en BTC.

Mensaje de solicitud 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 la solicitud es:/api/swap/v3/order。 Clave de acceso para verificación:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (Sólo con fines demostrativos, no es una CLAVE real) Firma de esta solicitud:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= API KEY Frase de contraseña:abc123 (Para demostración) Datos del cuerpo de la solicitud:{"aaa":"111","bbb":"222"}

De esta manera, puede observar el mensaje de solicitud y analizar el motivo por el cual la solicitud de interfaz encontró un error.

2. Solicitud de monitoreo local

El segundo método no requiere la creación de un robot. Utilice elNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Monitorizar solicitudes e imprimir mensajes.

En la terminal, utiliza el comandonc -l 8080, ejecutar Netcat.

Como se muestra en la figura: Obtenga la solución para enviar un mensaje de solicitud http por parte del host

De manera similar, implementamos un host en la máquina local y luego usamos el siguiente código para enviar una solicitud en la herramienta de depuración.

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // 这里把基地址改为本机,端口8080,Netcat 就可以监听到请求了
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

El mensaje de solicitud POST impreso en la terminal: Obtenga la solución para enviar un mensaje de solicitud http por parte del host

El mensaje de solicitud GET impreso en la terminal: Obtenga la solución para enviar un mensaje de solicitud http por parte del host