avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

Erstellt in: 2020-09-23 16:24:42, aktualisiert am: 2023-09-27 19:37:55
comments   0
hits   1511

Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

Beim Testen und Debuggen von Strategiecodes oder beim Ausführen von Robotern im realen Handel treten häufig Fehler auf, die von der Börsenschnittstelle gemeldet werden. Zu diesem Zeitpunkt müssen Sie die API-Dokumentation der Börsenschnittstelle und die zugehörigen Fehlerinformationen abfragen. Wenn Sie den technischen Kundendienst der Börsen-API konsultieren , Sie müssen bei der Meldung eines Fehlers immer eine Anforderungsnachricht bereitstellen, die zur Analyse der Fehlerursache verwendet wird.

Wenn Sie die Nachrichteninformationen zu diesem Zeitpunkt nicht sehen können, wissen Sie nicht, wo Sie mit der Suche nach dem Problem beginnen sollen. In diesem Artikel werden zwei Lösungen erläutert.

1. Verwenden Sie die Scapy-Bibliothek von Python, um das Paket zu erfassen und die gesendete Anforderungsnachricht auszudrucken

ErstinstallationscapyModule

pip3 install scapy 

Erstellen Sie dann eine Python-Richtlinie:

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

Erstellen Sie dann einen Roboter, der diese Strategie verwendet. Der Roboter erfasst die vom Server des Hosts gesendeten HTTP-Pakete. (Es gibt einige Lösungen für das fehlgeschlagene Erfassen von HTTPS-Paketen.)

Führen Sie diesen Paketerfassungsroboter aus. Anschließend können Sie mit dem Debugging-Tool Anfragen senden, damit der Roboter Pakete erfassen kann. Im Debugger schreiben wir den Code zum Senden der Anfrage.

function main(){
    // 要把基地址设置为其它http协议的地址,如果不设置交易所的地址一般都是https,这样是抓不到包的
    exchange.SetBase("http://www.baidu.com")    
    
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Vom Paketerfassungsroboter gedruckte Informationen: Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

Wir können es kopieren und uns die Nachricht ansehen: 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.comDamit können wir die Paketänderung erfassen. Sie können sie ignorieren. Die richtige sollte sein.Host: www.okex.com Sie können sehen, dass der Link in der Anforderungsnachricht lautet:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, besteht darin, die auf BTC basierenden Marktdaten für unbefristete Kontrakte anzufordern.

POST-Anforderungsnachricht:

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

Sie können sehen, dass der Anforderungspfad wie folgt lautet:/api/swap/v3/order。 Zugangsschlüssel zur Verifizierung:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (Nur für Demonstrationszwecke, kein echter SCHLÜSSEL) Unterschrift dieses Ersuchens:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= API-Schlüssel-Passphrase:abc123 (Zur Demonstration) Anforderungstextdaten:{"aaa":"111","bbb":"222"}

Auf diese Weise können Sie die Anforderungsnachricht beobachten und den Grund analysieren, warum bei der Schnittstellenanforderung ein Fehler aufgetreten ist.

2. Lokale Überwachungsanfrage

Die zweite Methode erfordert nicht die Erstellung eines Roboters. Verwenden Sie die eingebauteNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Anfragen überwachen und Meldungen drucken.

Verwenden Sie im Terminal den Befehlnc -l 8080, führen Sie Netcat aus.

Wie in der Abbildung gezeigt: Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

In ähnlicher Weise stellen wir einen Host auf dem lokalen Computer bereit und verwenden dann den folgenden Code, um eine Anforderung im Debugging-Tool zu senden.

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // 这里把基地址改为本机,端口8080,Netcat 就可以监听到请求了
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Die auf dem Terminal ausgedruckte POST-Anforderungsnachricht: Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host

Die auf dem Terminal ausgedruckte GET-Anforderungsnachricht: Holen Sie sich die Lösung zum Senden einer HTTP-Anforderungsnachricht durch den Host