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.
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:
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.com
es 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.
La segunda solución, sin crear un bot, es utilizar elNetcat
que 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 8080
para ejecutar Netcat.
Como se muestra en la imagen:
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:
El mensaje de solicitud GET impreso en el terminal: