avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

میں تخلیق کیا: 2020-09-23 16:24:42, تازہ کاری: 2023-09-27 19:37:55
comments   0
hits   1510

میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

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

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

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

پہلے انسٹال کریں۔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 پیکٹوں کو پکڑ لے گا

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

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

پیکٹ کیپچر روبوٹ کے ذریعہ چھپی ہوئی معلومات: میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

ہم اسے کاپی کر سکتے ہیں اور پیغام پر ایک نظر ڈال سکتے ہیں: درخواست کا پیغام حاصل کریں:

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 
/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 کلیدی پاسفریز:abc123 (مظاہرے کے لیے) باڈی ڈیٹا کی درخواست کریں:{"aaa":"111","bbb":"222"}

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

2. مقامی نگرانی کی درخواست

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

ٹرمینل میں، کمانڈ استعمال کریں۔nc -l 8080، Netcat چلائیں۔

جیسا کہ شکل میں دکھایا گیا ہے: میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

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

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

ٹرمینل پر چھپی ہوئی POST درخواست کا پیغام: میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔

ٹرمینل پر پرنٹ شدہ GET درخواست کا پیغام: میزبان کے ذریعہ HTTP درخواست پیغام بھیجنے کا حل حاصل کریں۔