4
Подписаться
1271
Подписчики

Получите решение отправки http-запроса хостом

Создано: 2020-09-23 16:24:42, Обновлено: 2023-09-27 19:37:55
comments   0
hits   1510

Получите решение отправки http-запроса хостом

Получите решение отправки http-запроса хостом

При тестировании и отладке кодов стратегий или запуске роботов в реальной торговле вы часто сталкиваетесь с ошибками, сообщаемыми интерфейсом биржи. В это время вам необходимо запросить документацию 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(){
    // 要把基地址设置为其它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()
}

Информация, распечатанная роботом-перехватчиком пакетов: Получите решение отправки http-запроса хостом

Мы можем скопировать его и посмотреть сообщение: Сообщение запроса 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 : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Мониторинг запросов и печать сообщений.

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

Как показано на рисунке: Получите решение отправки http-запроса хостом

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

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

Сообщение запроса POST, напечатанное на терминале: Получите решение отправки http-запроса хостом

Сообщение запроса GET, выведенное на терминал: Получите решение отправки http-запроса хостом