Die Ressourcen sind geladen. Beförderung...

Lösung für die vom Docker gesendete HTTP-Anfrage

Schriftsteller:FMZ~Lydia, Erstellt: 2022-11-10 20:49:38, Aktualisiert: 2023-09-14 20:36:06

img

Beim Testen und Debuggen des Strategiecodes oder beim Ausführen des Roboters auf dem echten Bot meldet die Exchange-Schnittstelle häufig Fehler. Gehen Sie zu diesem Zeitpunkt zum Exchange-Interface-API-Dokument, um die entsprechenden Fehlerinformationen abzufragen. Beim Abrufen des Exchange-API-Technischen Kundenservice müssen Sie immer die Anforderungsnachricht bereitstellen, wenn der Fehler gemeldet wird, um die Ursache des Fehlers zu analysieren.

In diesem Artikel werden wir zwei Lösungen zusammen diskutieren.

1. Verwenden Sie Python's scapy-Bibliothek, um Pakete zu erfassen und die gesendeten Anforderungsnachrichten auszudrucken

Zuerst installieren wir diescapyModul

pip3 install scapy 

Dann erstellen wir 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 wir einen Roboter, der die Strategie verwendet, und dieser Bot wird http-Pakete aufnehmen, die vom Server des Docker-Anbieters gesendet werden, zu dem er gehört (die https nicht aufnehmen kann, haben wir einige Lösungen dafür).

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

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

Informationen, die vom Paketfangroboter gedruckt werden:img

Wir können die Nachricht kopieren und sehen: 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, um in der Lage zu sein, das Paket zu fangen, können Sie es ignorieren, sollte die richtige seinHost: www.okex.comWir können sehen, dass der Link in der Anforderungsnachricht lautet:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, ist es, die BTC native dauerhafte Vertragsmarktdaten anzufordern.

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

Wir können sehen, dass der Anforderungspfad:/api/swap/v3/order- Ich weiß. Zugriffsschlüssel überprüft:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Nur zur Demonstration, nicht der eigentliche Schlüssel) Unterschrift des Antrags:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY geheimer Schlüssel Passphrase:abc123(nur zur Demonstration) Erforderte Daten des Körpers:{"aaa":"111","bbb":"222"}

Auf diese Weise können wir die Anforderungsnachricht beobachten und den Grund analysieren, warum die Schnittstellenanfrage auf einen Fehler trifft.

2. Anforderung zur lokalen Anhörung

Die zweite Methode erfordert nicht, einen Roboter zu erstellen, verwendet nur dieNetcatDas kommt mit dem Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinÜberwachen Sie die Anfragen und drucken Sie Nachrichten.

Auf dem Terminal, laufen Sie Netcat mit dem Befehlnc - l 8080.

Wie auf dem Bild unten:img

Ähnlich implementieren wir einen Docker auf unserem Computer und verwenden dann den folgenden Code, um Anfragen in das Debug-Tool zu senden.

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

Die auf dem Terminal gedruckte POST-Anforderungsnachricht:img

Die auf dem Terminal gedruckte GET-Anforderungsmeldung:img


Mehr