При тестировании и отлаживании кода стратегии или запуске бота на реальном рынке интерфейс платформы часто сообщается с ошибками. В это время вам нужно запросить документацию 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 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()
}
Информация, напечатанная ботом захвата пакетов:
Мы можем скопировать запросы и посмотреть: Сообщение запроса 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Слушайте запросы и печатайте сообщения.
В терминале используйте командуnc -l 8080
чтобы управлять Netcat.
Как показано на рисунке:
Точно так же мы развертываем докер на этой машине, а затем в инструменте отладки используем следующий код для отправки запроса.
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 на терминале:
Сообщение запроса GET, напечатанное на терминале: