При тестировании и отлаживании кода стратегии или запуска робота на реальном боте интерфейс обмена часто сообщает об ошибках. В это время перейдите в документ API интерфейса обмена, чтобы запросить соответствующую информацию об ошибке. При обращении в техническую службу обслуживания клиентов API обмена вам всегда нужно предоставить сообщение о запросе при сообщении об ошибке, чтобы проанализировать причину ошибки.
В настоящее время нет способа найти проблемы, не видя информацию сообщения.
Сначала мы устанавливаем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()
}
Информация, напечатанная роботом, ловящим посылки:
Мы можем скопировать и увидеть сообщение: Сообщение запроса 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"}
。
Таким образом, мы можем наблюдать за сообщением запроса и анализировать причину, по которой запрос интерфейса сталкивается с ошибкой.
Второй метод не требует создания робота, просто используетNetcat
который поставляется с Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinСледите за запросами и печатайте сообщения.
На терминале, запустить Netcat с командойnc - l 8080
.
Как на картинке ниже:
Аналогичным образом, мы развертываем докер на нашем компьютере, а затем используем следующий код для отправки запросов в инструмент отладки.
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, напечатанное на терминале:
Сообщение запроса GET, напечатанное на терминале: