Soluções para obter a mensagem de solicitação do Docker Http

Autora:Ninabadass, Criado: 2022-04-27 10:55:50, Atualizado: 2022-04-27 10:57:37

Soluções para obter a mensagem de solicitação do Docker Http

Ao testar e depurar o código da estratégia, ou executar o bot em um mercado real, a interface da plataforma é frequentemente relatada com erros. Neste momento, você precisa consultar a documentação da API da interface da plataforma, procurar as informações relevantes de relatórios de erros e sempre precisa fornecer as mensagens de solicitação de erros, ao consultar o serviço técnico da API da plataforma, para analisar as causas dos erros.

Se não puder ver as informações da mensagem, será difícil encontrar os problemas.

1. Use o Python Scapy (packet capture) para imprimir a mensagem de solicitação enviada

Primeiro, instale.scapy.

pip3 install scapy 

Então, crie 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")

Em seguida, criar um bot que usa a estratégia, e o bot vai capturar pacotes http enviados pelo servidor docker (https não pode pegar os pacotes, e temos algum processamento para isso).

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

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

A informação impressa pelo bot de captura de pacotes:img

Podemos copiar as mensagens de solicitação e dar uma olhada: 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 modificamos para capturar os pacotes, que podem ser ignorados; o correto deve serHost: www.okex.com- Não. Você pode ver o link na mensagem de solicitação é:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, que é solicitar os dados do mercado de contratos perpétuos cripto-marginados (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"}

Você pode ver que o caminho da solicitação é:/api/swap/v3/order- Não. Chave de acesso verificada:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(para demonstração, não KEY real) Assinatura do presente pedido:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=Passphrase da API KEY:abc123(para demonstração) Dados do organismo requerido:{"aaa":"111","bbb":"222"}.

Assim, podemos observar as mensagens de solicitação e analisar as causas dos erros encontrados pela interface.

2. Solicitação do ouvinte local

A segunda solução, sem criar um bot, é usar oNetcatque vem com o sistema Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinOuça pedidos e imprima mensagens.

No terminal, use o comandonc -l 8080para gerir a Netcat.

Como mostra a imagem:img

Da mesma forma, implantamos um docker nesta máquina e, em seguida, na ferramenta de depuração, usar o seguinte código para enviar uma solicitação.

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

A mensagem de pedido POST impressa no terminal:img

A mensagem de pedido GET impressa no terminal:img


Mais.