রিসোর্স লোড হচ্ছে... লোডিং...

ডকার দ্বারা প্রেরিত http অনুরোধ বার্তা পাওয়ার সমাধান

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২২-১১-১০ 20:49:38, আপডেটঃ ২০২৩-০৯-১৪ 20:36:06

img

কৌশল কোড পরীক্ষা এবং ডিবাগ করার সময়, বা বাস্তব বটে রোবট চালানোর সময়, এক্সচেঞ্জ ইন্টারফেস প্রায়শই ত্রুটি রিপোর্ট করে। এই সময়ে, সংশ্লিষ্ট ত্রুটি তথ্য অনুসন্ধানের জন্য এক্সচেঞ্জ ইন্টারফেস এপিআই নথিতে যান। এক্সচেঞ্জ এপিআই প্রযুক্তিগত গ্রাহক পরিষেবাতে পরামর্শ করার সময়, আপনাকে সর্বদা ত্রুটির কারণ বিশ্লেষণের জন্য ত্রুটি রিপোর্ট করা হলে অনুরোধ বার্তা সরবরাহ করতে হবে।

এই মুহুর্তে, বার্তার তথ্য না দেখে সমস্যাগুলি খুঁজে পাওয়ার কোনও উপায় নেই। এই নিবন্ধে, আমরা দুটি সমাধান একসাথে আলোচনা করব।

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, এটা BTC নেটিভ চিরস্থায়ী চুক্তি বাজার তথ্য অনুরোধ করা হয়.

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=এপিআই কী সিক্রেট কীপাসফ্রেজ:abc123(শুধুমাত্র প্রদর্শনের জন্য) অনুরোধকৃত সংস্থার তথ্যঃ{"aaa":"111","bbb":"222"}

এইভাবে, আমরা অনুরোধ বার্তাটি পর্যবেক্ষণ করতে পারি এবং ইন্টারফেস অনুরোধটি কেন ত্রুটির মুখোমুখি হয় তার কারণ বিশ্লেষণ করতে পারি।

২. স্থানীয় শ্রবণ অনুরোধ

দ্বিতীয় পদ্ধতিতে রোবট তৈরি করার প্রয়োজন নেই, শুধু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


আরো