संसाधन लोड हो रहा है... लोड करना...

डॉकर द्वारा भेजा गया http अनुरोध संदेश प्राप्त करने का समाधान

लेखक:FMZ~Lydia, बनाया गयाः 2022-11-10 20:49:38, अद्यतन किया गयाः 2023-09-14 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"}

इस तरह, हम अनुरोध संदेश का निरीक्षण कर सकते हैं और विश्लेषण कर सकते हैं कि इंटरफ़ेस अनुरोध में त्रुटि क्यों होती है।

2. स्थानीय सुनने का अनुरोध

दूसरी पद्धति में रोबोट बनाने की आवश्यकता नहीं है, बसNetcatकि मैक के साथ आता हैःhttps://baike.baidu.com/item/Netcat/9952751?fr=aladdinअनुरोधों की निगरानी करें और संदेश प्रिंट करें।

टर्मिनल पर, कमांड के साथ नेटकैट चलाएँ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


अधिक