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

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

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:

El mensaje de solicitud GET impreso en la terminal:
