Lösungen zur Erfassung der Docker-Http-Anfrage

Schriftsteller:- Ich bin ein Idiot., Erstellt: 2022-04-27 10:55:50, Aktualisiert: 2022-04-27 10:57:37

Lösungen zur Erfassung der Docker-Http-Anfrage

Beim Testen und Debuggen des Strategiecodes oder beim Ausführen des Bots in einem realen Markt wird die Plattformoberfläche häufig mit Fehlern gemeldet. Zu diesem Zeitpunkt müssen Sie die Plattformoberflächen-API-Dokumentation abfragen, nach den relevanten Fehlerberichterstattungsinformationen suchen und immer die Anforderungsnachrichten von Fehlern bereitstellen, wenn Sie den technischen Dienst der Plattform-API abfragen, um die Ursachen der Fehler zu analysieren.

Wenn Sie die Nachrichteninformationen nicht sehen können, wird es schwierig sein, die Probleme zu finden.

1. Verwenden Sie Python Scapy (Packet Capture), um die gesendete Anforderungsnachricht zu drucken

Zuerst installierenscapy.

pip3 install scapy 

Dann erstellen Sie eine Python-Strategie:

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")

Dann erstellen Sie einen Bot, der die Strategie verwendet, und der Bot wird http-Pakete erfassen, die vom Docker-Server gesendet werden (https kann die Pakete nicht fangen, und wir haben einige Verarbeitung dafür).

Führen Sie den Paket-Capture-Bot aus, und dann können Sie das Debugging-Tool verwenden, um Anfragen zu senden, damit der Bot Pakete erfassen kann.

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()
}

Die Informationen, die der Bot von Packet Capture druckt:img

Wir können die Nachrichten kopieren und einen Blick darauf werfen: GET-Anforderungsnachricht:

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.comist, was wir geändert haben, um die Pakete zu fangen, die ignoriert werden können; die richtige sollte seinHost: www.okex.com- Ich weiß. Sie können sehen, dass der Link in der Anfrage ist:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, die die Daten des Marktes für Crypto-Margined-Perpetual Contracts (BTC) anfordern soll.

Nachricht zur POST-Anfrage:

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"}

Wie Sie sehen können, ist der Anforderungspfad:/api/swap/v3/order- Ich weiß. Zugriffsschlüssel überprüft:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(für Demo, nicht echtes KEY) Unterschrift des Antrags:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=Passphrase für den API-Schlüssel:abc123(für Demo) Erforderte Daten des Organes:{"aaa":"111","bbb":"222"}.

Somit können wir die Anforderungsnachrichten beobachten und die Ursachen von Fehlern analysieren, denen die Schnittstelle begegnet.

2. Nachfrage des örtlichen Hörers

Die zweite Lösung, ohne einen Bot zu erstellen, besteht darin, dieNetcatDas kommt mit dem Mac-System:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinHören Sie auf Anfragen und drucken Sie Nachrichten aus.

Im Terminal benutzen Sie den Befehlnc -l 8080um Netcat zu betreiben.

Wie auf dem Bild gezeigt:img

Ebenso implementieren wir einen Docker auf dieser Maschine und dann im Debugger verwenden wir den folgenden Code, um eine Anfrage zu senden.

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()
}

Die auf dem Terminal gedruckte POST-Anfrage:img

Die auf dem Terminal gedruckte GET-Anforderungsmeldung:img


Mehr