Giải pháp để nhận thông báo yêu cầu http được gửi bởi Docker

Tác giả:Lydia., Tạo: 2022-11-10 20:49:38, Cập nhật: 2023-09-14 20:36:06

img

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.

1. Sử dụng thư viện scapy của Python để lấy các gói và in ra các tin nhắn yêu cầu được gửi

Đầu tiên chúng ta lắp đặtscapymô-đ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:img

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.comlà 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.comChú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 Passphrase: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.

2. Yêu cầu nghe địa phương

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:img

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:img

Thông báo yêu cầu GET được in trên thiết bị đầu cuối:img


Thêm nữa