Решения для получения сообщения Docker Http Request

Автор:Нинабадасс., Создано: 2022-04-27 10:55:50, Обновлено: 2022-04-27 10:57:37

Решения для получения сообщения Docker Http Request

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

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

1. Используйте Python Scapy (захват пакетов) для печати отправленного запроса

Во-первых, установить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 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()
}

Информация, напечатанная ботом захвата пакетов: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Слушайте запросы и печатайте сообщения.

В терминале используйте командуnc -l 8080чтобы управлять Netcat.

Как показано на рисунке:img

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

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

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

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


Больше