전략 코드를 테스트하고 디버깅하거나 실제 시장에서 봇을 실행할 때, 플랫폼 인터페이스는 종종 오류가 보고됩니다. 이 시점에서 플랫폼 인터페이스 API 문서를 검색하고 관련 오류 보고 정보를 검색하고 항상 오류 요청 메시지를 제공해야합니다. 플랫폼 API 기술 서비스를 검색 할 때 오류의 원인을 분석합니다.
메시지의 정보를 볼 수 없다면 문제를 찾기가 어려울 것입니다. 이 기사에서는 두 가지 솔루션을 논의합니다.
먼저, 설치scapy
.
pip3 install scapy
다음으로 파이썬 전략을 만들어보세요.
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
(데모용, 진짜 KEY가 아닌)
이 요청에 대한 서명:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
API KEY 비밀번호:abc123
(데모용)
요청된 기관 데이터:{"aaa":"111","bbb":"222"}
.
따라서 우리는 요청 메시지를 관찰하고 인터페이스에서 발생하는 오류의 원인을 분석할 수 있습니다.
두 번째 해결책은 로봇을 만들지 않고Netcat
Mac 시스템과 함께 제공되는:https://baike.baidu.com/item/Netcat/9952751?fr=aladdin요청들을 듣고 메시지를 인쇄하세요.
터미널에서 명령어를 사용nc -l 8080
네트
그림에서 보듯이:
마찬가지로, 우리는 이 기계에 도커를 배포하고, 디버깅 툴에서 다음 코드를 사용하여 요청을 전송합니다.
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 요청 메시지는: