Solução para obter a mensagem de solicitação http enviada pelo Docker

Autora:Lydia., Criado: 2022-11-10 20:49:38, Atualizado: 2023-09-14 20:36:06

img

Ao testar e depurar o código da estratégia, ou executar o robô no bot real, a interface de troca geralmente relata erros. Neste momento, vá ao documento da API da interface de troca para consultar as informações de erro relevantes. Ao consultar o serviço técnico do cliente da API de troca, você sempre precisa fornecer a mensagem de solicitação quando o erro é relatado para analisar a causa do erro.

Neste momento, não há maneira de encontrar problemas sem ver as informações da mensagem.

1. Usando a biblioteca scapy do Python para pegar pacotes e imprimir as mensagens de solicitação enviadas

Primeiro instalamos oscapymódulo

pip3 install scapy 

Então criamos uma estratégia 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")

Então nós criamos um robô que usa a estratégia, e que bot vai pegar pacotes http enviados do servidor do provedor docker que pertence (que https não pode pegar teremos algumas soluções para isso).

Executar o robô de captura de pacotes, e então você pode usar a ferramenta de depuração para enviar solicitações para deixar o robô captar pacotes.

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

Informações impressas pelo robô de captura de pacotes:img

Podemos copiar e ver a mensagem: Mensagem de pedido 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é o que mudamos para ser capaz de pegar o pacote, você pode ignorá-lo, o correto deve serHost: www.okex.comPodemos ver que o link na mensagem de solicitação é:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, é para solicitar os dados do mercado de contratos perpétuos nativos BTC.

Mensagem de pedido 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 o caminho da solicitação é:/api/swap/v3/order- Não. Chave de acesso verificada:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Só para demonstração, não a chave real) Assinatura do pedido:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY chave secreta Passphrase:abc123(apenas para demonstração) Dados do organismo requerido:{"aaa":"111","bbb":"222"}

Desta forma, podemos observar a mensagem de solicitação e analisar a razão pela qual a solicitação de interface encontra um erro.

2. Solicitação de audição local

O segundo método não precisa de criar um robô, apenas usa oNetcatque vem com o Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinMonitorar os pedidos e imprimir mensagens.

No terminal, execute o Netcat com o comandonc - l 8080.

Como a imagem abaixo:img

Da mesma forma, implantamos um docker no nosso computador, e depois usamos o seguinte código para enviar solicitações na ferramenta de depuração.

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

A mensagem de pedido POST impressa no terminal:img

A mensagem de pedido GET impressa no terminal:img


Mais.