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

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

Solution to Get the http Request Message Sent by the Docker

При тестировании и отлаживании кода стратегии или запуска робота на реальном боте интерфейс обмена часто сообщает об ошибках. В это время перейдите в документ 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()
}

Информация, напечатанная роботом, ловящим посылки:Solution to Get the http Request Message Sent by the Docker

Мы можем скопировать и увидеть сообщение: Сообщение запроса 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 
We can see the link in the request message is: ```/api/swap/v3/instruments/BTC-USD-SWAP/ticker```, it is to request the BTC native perpetual contract market data.

POST request message:

ПОСТ /api/swap/v3/order /api/swap/v3/order /api/swap/v3/order /api/swap/v3/order /swap/swap/v3/order /swap/swap/v3/order /api/swap/v3/order /swap/swap/v3/order /swap/swap/swap/v3/order /swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap/swap HTTP/1.1 Ведущий: www.baidu.com Пользовательский агент: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/35.0.1916.153 Safari/537.36 Длина содержания: 25 Тип содержимого: application/json; charset=UTF-8 Окей, ключ доступа: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 Ok-Access-Passphrase: abc123 ОК-доступный сигнал: h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= Ok-Access-Timestamp: 2020-09-23T08:43:49.906Z Принимать кодирование: gzip

Я не знаю, что делать.

We can see the request path is: ```/api/swap/v3/order```.
Verified Access Key: ```d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4``` (For demonstration only, not the real KEY)
Signature of the request: ```h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=```
API KEY secret key--Passphrase: ```abc123``` (For demonstration only)
Requested Body data: ```{"aaa":"111","bbb":"222"}```。

In this way, we can observe the request message and analyze the reason why the interface request encounters an error.

### 2. Local listening request
The second method does not need to create a robot, just uses the ```Netcat``` that comes with the Mac: https://baike.baidu.com/item/Netcat/9952751?fr=aladdin. Monitor the requests and print messages.

On the terminal, run Netcat with the command ```nc - l 8080```.

As the picture below:
![Solution to Get the http Request Message Sent by the Docker](/upload/asset/28d7f2156cdb996092a8a.png)

Similarly, we deploy a docker on our computer, and then use the following code to send requests in the debugging tool.

Функция основной exchange.SetBase(http://127.0.0.1:8080) // Здесь мы изменяем адрес базы на локальную машину, порт 8080, и Netcat может получить запрос // Запрос POST exchange.IO ((api, POST, /api/swap/v3/order, aaa=111&bbb=222)

// GET request
exchange.SetContractType("swap")
exchange.GetTicker()

Я не знаю. ` Сообщение о запросе POST, напечатанное на терминале:Solution to Get the http Request Message Sent by the Docker

Сообщение запроса GET, напечатанное на терминале:Solution to Get the http Request Message Sent by the Docker


Больше информации