ڈوکر کی طرف سے بھیجا گیا HTTP درخواست پیغام حاصل کرنے کا حل

مصنف:لیدیہ, تخلیق: 2022-11-10 20:49:38, تازہ کاری: 2023-09-14 20:36:06

img

حکمت عملی کوڈ کی جانچ اور ڈیبگنگ کرتے وقت ، یا روبوٹ کو حقیقی بوٹ پر چلانے پر ، ایکسچینج انٹرفیس اکثر غلطیوں کی اطلاع دیتا ہے۔ اس وقت ، متعلقہ غلطی کی معلومات سے استفسار کرنے کے لئے ایکسچینج انٹرفیس API دستاویز پر جائیں۔ ایکسچینج API تکنیکی کسٹمر سروس سے مشورہ کرتے وقت ، آپ کو ہمیشہ غلطی کی وجہ کا تجزیہ کرنے کے لئے غلطی کی اطلاع دیتے وقت درخواست کا پیغام فراہم کرنے کی ضرورت ہوتی ہے۔

اس وقت ، پیغام کی معلومات کو دیکھے بغیر مسائل تلاش کرنے کا کوئی طریقہ نہیں ہے۔ اس مضمون میں ، ہم دو حلوں پر ایک ساتھ تبادلہ خیال کریں گے۔

1. پیتھون کی اسکائپی لائبریری کا استعمال پیکیٹس کو پکڑنے اور بھیجے گئے درخواست پیغامات کو پرنٹ کرنے کے لئے

سب سے پہلے ہم نصبscapyماڈیول

pip3 install scapy 

پھر ہم ایک پطرون حکمت عملی تخلیق:

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

پھر ہم ایک روبوٹ بناتے ہیں جو اس حکمت عملی کا استعمال کرتا ہے، اور یہ بوٹ اس کے متعلقہ ڈوکر فراہم کنندہ کے سرور سے بھیجے گئے HTTP پیکٹوں کو پکڑ لے گا (جو https نہیں پکڑ سکتا اس کے کچھ حل ہیں).

پیکٹ پکڑنے والے روبوٹ کو چلائیں، اور پھر آپ ڈیبگنگ ٹول کا استعمال کرکے روبوٹ کو پیکٹ پکڑنے کی اجازت دینے کے لئے درخواستیں بھیج سکتے ہیں۔ ڈیبگنگ ٹول میں، ہم کوڈ لکھتے ہیں جو درخواست بھیجتا ہے۔

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

پیکیج پکڑنے والے روبوٹ کے ذریعہ چھپی ہوئی معلومات:img

ہم نقل کر سکتے ہیں اور پیغام دیکھ سکتے ہیں: 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.comہم پیکج پکڑنے کے قابل ہو جائے کرنے کے لئے تبدیل کیا ہے، آپ کو نظر انداز کر سکتے ہیں، صحیح ایک ہونا چاہئےHost: www.okex.comہم درخواست پیغام میں لنک دیکھ سکتے ہیں:/api/swap/v3/instruments/BTC-USD-SWAP/ticker، یہ بی ٹی سی مقامی دائمی معاہدے کی مارکیٹ کے اعداد و شمار کی درخواست کرنا ہے.

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

ہم دیکھ سکتے ہیں کہ درخواست کا راستہ ہے:/api/swap/v3/order. تصدیق شدہ رسائی کلید:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(صرف مظاہرے کے لئے، حقیقی کلید نہیں) درخواست پر دستخط:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY خفیہ کلیدپاسفرائس:abc123(صرف مظاہرے کے لئے) مطلوبہ ادارے کا ڈیٹا:{"aaa":"111","bbb":"222"}

اس طرح، ہم درخواست پیغام کا مشاہدہ کر سکتے ہیں اور اس وجہ کا تجزیہ کر سکتے ہیں کہ کیوں انٹرفیس کی درخواست غلطی کا سامنا کرتی ہے.

2۔ مقامی طور پر سننے کی درخواست

دوسرا طریقہ ایک روبوٹ بنانے کی ضرورت نہیں ہے، صرف استعمال کرتا ہےNetcatکہ میک کے ساتھ آتا ہے:https://baike.baidu.com/item/Netcat/9952751?fr=aladdin- درخواستوں کی نگرانی اور پیغامات پرنٹ.

ٹرمینل پر، کمانڈ کے ساتھ Netcat چلائیںnc - l 8080.

جیسا کہ ذیل میں تصویر:img

اسی طرح، ہم اپنے کمپیوٹر پر ڈوکر تعینات کرتے ہیں، اور پھر مندرجہ ذیل کوڈ کا استعمال ڈیبگنگ ٹول میں درخواستیں بھیجنے کے لئے کرتے ہیں۔

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

POST درخواست پیغام ٹرمینل پر پرنٹ:img

GET درخواست پیغام ٹرمینل پر پرنٹ:img


مزید