Khi kiểm tra và gỡ lỗi mã chiến lược, hoặc chạy robot trên bot thực sự, giao diện trao đổi thường báo cáo lỗi. Tại thời điểm này, hãy truy cập tài liệu API giao diện trao đổi để truy vấn thông tin lỗi có liên quan. Khi tham khảo dịch vụ khách hàng kỹ thuật API trao đổi, bạn luôn cần cung cấp thông báo yêu cầu khi báo cáo lỗi để phân tích nguyên nhân của lỗi.
Tại thời điểm này, không có cách nào để tìm thấy vấn đề mà không nhìn thấy thông tin thông báo. Trong bài viết này, chúng tôi sẽ thảo luận hai giải pháp cùng nhau.
Đầu tiên chúng ta lắp đặtscapy
mô-đun
pip3 install scapy
Sau đó chúng ta tạo ra một chiến lược 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")
Sau đó, chúng tôi tạo ra một robot sử dụng chiến lược, và bot đó sẽ bắt các gói http được gửi từ máy chủ của nhà cung cấp docker mà nó thuộc về (mà https không thể bắt được chúng tôi sẽ có một số giải pháp cho điều này).
Chạy robot bắt gói, và sau đó bạn có thể sử dụng công cụ gỡ lỗi để gửi yêu cầu để cho robot bắt gói. trong công cụ gỡ lỗi, chúng tôi viết mã gửi yêu cầu.
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()
}
Thông tin được in bởi robot bắt gói:
Chúng ta có thể sao chép và xem tin nhắn: GET yêu cầu thông báo:
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
là những gì chúng tôi thay đổi để có thể bắt được các gói, bạn có thể bỏ qua nó, đúng một nênHost: www.okex.com
Chúng ta có thể thấy liên kết trong thông điệp yêu cầu là:/api/swap/v3/instruments/BTC-USD-SWAP/ticker
, nó là để yêu cầu dữ liệu thị trường hợp đồng vĩnh cửu BTC gốc.
Thông báo yêu cầu 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"}
Chúng ta có thể thấy đường dẫn yêu cầu là:/api/swap/v3/order
.
Chìa khóa truy cập xác minh:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4
(Chỉ để chứng minh, không phải là chìa khóa thực sự)
Chữ ký của yêu cầu:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
API KEY khóa bí mật abc123
(Chỉ dùng để chứng minh)
Dữ liệu cơ quan yêu cầu:{"aaa":"111","bbb":"222"}
。
Bằng cách này, chúng ta có thể quan sát thông điệp yêu cầu và phân tích lý do tại sao yêu cầu giao diện gặp lỗi.
Phương pháp thứ hai không cần phải tạo ra một robot, chỉ sử dụngNetcat
đi kèm với máy Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdin- Theo dõi các yêu cầu và in tin nhắn.
Trên thiết bị đầu cuối, chạy Netcat với lệnhnc - l 8080
.
Như hình bên dưới:
Tương tự, chúng ta triển khai một docker trên máy tính của chúng ta, và sau đó sử dụng mã sau để gửi yêu cầu trong công cụ gỡ lỗi.
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()
}
Thông báo yêu cầu POST được in ra trên thiết bị đầu cuối:
Thông báo yêu cầu GET được in trên thiết bị đầu cuối: