Type/to search
8
Follow
1369
Followers
Obtenez la solution de l'envoi d'un message de requête http par l'hôte
Discussions
Created 2020-09-23 16:24:42  Updated 2023-09-27 19:37:55
 0
 1867

img

Obtenez la solution de l'envoi d'un message de requête http par l'hôte

Lors du test et du débogage des codes de stratégie ou de l'exécution de robots dans le cadre d'un trading réel, vous rencontrez souvent des erreurs signalées par l'interface d'échange. À ce stade, vous devez interroger la documentation de l'API de l'interface d'échange et les informations d'erreur associées. Lors de la consultation du service client technique de l'API d'échange , vous devez toujours fournir un message de demande lorsqu'une erreur est signalée, utilisé pour analyser la cause de l'erreur.

À ce stade, si vous ne parvenez pas à voir les informations du message, vous ne saurez pas par où commencer pour trouver le problème. Dans cet article, nous allons discuter de deux solutions.

1. Utilisez la bibliothèque scapy de Python pour capturer le paquet et imprimer le message de demande envoyé

Première installationscapyModules

pip3 install scapy

Créez ensuite une politique 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")

Créez ensuite un robot utilisant cette stratégie, qui capturera les paquets http envoyés par le serveur de l'hôte auquel il appartient (il existe quelques solutions pour l'échec de capture https).

Exécutez ce robot de capture de paquets, puis vous pouvez utiliser l’outil de débogage pour envoyer des requêtes permettant au robot de capturer des paquets. Dans le débogueur, nous écrivons le code pour envoyer la requête.

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

Informations imprimées par le robot de capture de paquets :
img

Nous pouvons le copier et jeter un œil au message :
Message de demande GET :

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.comCeci nous permet de détecter la modification du package, vous pouvez l'ignorer, la bonne devrait êtreHost: www.okex.com
Vous pouvez voir que le lien dans le message de demande est :/api/swap/v3/instruments/BTC-USD-SWAP/ticker, consiste à demander les données du marché des contrats perpétuels basés sur le BTC.

Message de requête 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"}

Vous pouvez voir que le chemin de la requête est :/api/swap/v3/order
Clé d'accès pour la vérification :d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (À des fins de démonstration uniquement, ce n'est pas une vraie CLÉ)
Signature de cette demande :h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
Clé API Mot de passe :abc123 (Pour démonstration)
Données du corps de la requête :{"aaa":"111","bbb":"222"}

De cette façon, vous pouvez observer le message de demande et analyser la raison pour laquelle la demande d'interface a rencontré une erreur.

2. Demande de surveillance locale

La deuxième méthode ne nécessite pas la création d'un robot. Utilisez leNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin . Surveiller les demandes et imprimer les messages.

Dans le terminal, utilisez la commandenc -l 8080, exécutez Netcat.

Comme le montre la figure :
img

De même, nous déployons un hôte sur la machine locale, puis utilisons le code suivant pour envoyer une demande dans l’outil de débogage.

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

Le message de requête POST imprimé sur le terminal :
img

Le message de requête GET imprimé sur le terminal :
img

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)