Решение для получения сообщения запроса http, отправленного Docker

Автор:Лидия., Создано: 2022-11-10 20:49:38, Обновлено: 2023-09-14 20:36:06

img

При тестировании и отлаживании кода стратегии или запуска робота на реальном боте интерфейс обмена часто сообщает об ошибках. В это время перейдите в документ API интерфейса обмена, чтобы запросить соответствующую информацию об ошибке. При обращении в техническую службу обслуживания клиентов API обмена вам всегда нужно предоставить сообщение о запросе при сообщении об ошибке, чтобы проанализировать причину ошибки.

В настоящее время нет способа найти проблемы, не видя информацию сообщения.

1. Использование библиотеки scapy Python для захвата пакетов и печати отправленных запросов

Сначала мы устанавливаемscapyмодуль

pip3 install scapy 

Затем мы создаем стратегию 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")

Затем мы создаем робота, который использует эту стратегию, и этот бот будет улавливать HTTP-пакеты, отправленные с сервера поставщика докеров, к которому он принадлежит (что https не может улавливать у нас есть некоторые решения этого).

Запустите робота-поймателя пакетов, и затем вы можете использовать инструмент отладки для отправки запросов, чтобы позволить роботу поймать пакеты.

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

Информация, напечатанная роботом, ловящим посылки:img

Мы можем скопировать и увидеть сообщение: Сообщение запроса 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Это то, что мы изменили, чтобы быть в состоянии поймать пакет, вы можете проигнорировать его, правильный должен бытьHost: www.okex.comМы видим, что ссылка в сообщении запроса:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, это запросить данные BTC на рынке постоянных контрактов.

Сообщение запроса 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"}

Мы видим, что путь запроса:/api/swap/v3/order- Да, конечно. Проверенный ключ доступа:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Только для демонстрации, не настоящий Ключ) Подпись заявки:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY секретный ключ Пароль:abc123(только для демонстрации) Данные запрашиваемого органа:{"aaa":"111","bbb":"222"}

Таким образом, мы можем наблюдать за сообщением запроса и анализировать причину, по которой запрос интерфейса сталкивается с ошибкой.

2. Запрос на местное прослушивание

Второй метод не требует создания робота, просто используетNetcatкоторый поставляется с Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinСледите за запросами и печатайте сообщения.

На терминале, запустить Netcat с командойnc - l 8080.

Как на картинке ниже:img

Аналогичным образом, мы развертываем докер на нашем компьютере, а затем используем следующий код для отправки запросов в инструмент отладки.

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

Сообщение о запросе POST, напечатанное на терминале:img

Сообщение запроса GET, напечатанное на терминале:img


Больше