avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Obtenha a solução de envio de mensagem de solicitação http pelo host

Criado em: 2020-09-23 16:24:42, atualizado em: 2023-09-27 19:37:55
comments   0
hits   1510

Obtenha a solução de envio de mensagem de solicitação http pelo host

Obtenha a solução de envio de mensagem de solicitação http pelo host

Ao testar e depurar códigos de estratégia, ou executar robôs em negociações reais, você frequentemente encontra erros relatados pela interface de câmbio. Neste momento, você precisa consultar a documentação da API da interface de câmbio e informações de erro relacionadas. Ao consultar o serviço técnico ao cliente da API de câmbio , você sempre precisa fornecer uma mensagem de solicitação quando um erro for relatado, usada para analisar a causa do erro.

Neste momento, se você não consegue ver as informações da mensagem, não saberá por onde começar a encontrar o problema. Neste artigo, discutiremos duas soluções.

1. Use a biblioteca scapy do Python para capturar o pacote e imprimir a mensagem de solicitação enviada

Primeira instalaçãoscapyMódulos

pip3 install scapy 

Em seguida, crie uma política 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 crie um robô que use essa estratégia. O robô irá capturar os pacotes http enviados pelo servidor do host. (Existem algumas soluções para a falha na captura de pacotes https.)

Execute este robô de captura de pacotes e, em seguida, você poderá usar a ferramenta de depuração para enviar solicitações para permitir que o robô capture pacotes. No depurador escrevemos o código para enviar a solicitação.

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

Informações impressas pelo robô de captura de pacotes: Obtenha a solução de envio de mensagem de solicitação http pelo host

Podemos copiá-lo e dar uma olhada na mensagem: Mensagem de solicitação 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.comIsso é para que possamos capturar a modificação do pacote, você pode ignorá-la, a correta deve serHost: www.okex.com Você pode ver que o link na mensagem de solicitação é:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, é solicitar dados de mercado de contratos perpétuos baseados em BTC.

Mensagem de solicitação 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。 Chave de acesso para verificação:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (Apenas para fins de demonstração, não é uma CHAVE real) Assinatura desta solicitação:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= Senha da CHAVE API:abc123 (Para demonstração) Dados do corpo da solicitação:{"aaa":"111","bbb":"222"}

Dessa forma, você pode observar a mensagem de solicitação e analisar o motivo pelo qual a solicitação de interface encontrou um erro.

2. Solicitação de monitoramento local

O segundo método não requer a criação de um robô. Use o built-inNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Monitore solicitações e imprima mensagens.

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

Conforme mostrado na figura: Obtenha a solução de envio de mensagem de solicitação http pelo host

Da mesma forma, implantamos um host na máquina local e usamos o código a seguir para enviar uma solicitação na ferramenta de depuração.

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

A mensagem de solicitação POST impressa no terminal: Obtenha a solução de envio de mensagem de solicitação http pelo host

A mensagem de solicitação GET impressa no terminal: Obtenha a solução de envio de mensagem de solicitação http pelo host