4
ध्यान केंद्रित करना
1271
समर्थक

होस्ट द्वारा http अनुरोध संदेश भेजने का समाधान प्राप्त करें

में बनाया: 2020-09-23 16:24:42, को अपडेट: 2023-09-27 19:37:55
comments   0
hits   1510

होस्ट द्वारा http अनुरोध संदेश भेजने का समाधान प्राप्त करें

होस्ट द्वारा http अनुरोध संदेश भेजने का समाधान प्राप्त करें

रणनीति कोड का परीक्षण और डिबगिंग करते समय, या वास्तविक ट्रेडिंग में रोबोट चलाते समय, आपको अक्सर एक्सचेंज इंटरफ़ेस द्वारा रिपोर्ट की गई त्रुटियों का सामना करना पड़ता है। इस समय, आपको एक्सचेंज इंटरफ़ेस 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(){
    // 要把基地址设置为其它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, बीटीसी-आधारित सतत अनुबंध बाजार डेटा का अनुरोध करना है।

पोस्ट अनुरोध संदेश:

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, नेटकैट चलाएँ.

जैसा कि चित्र में दिखाया गया है: होस्ट द्वारा 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 अनुरोध संदेश भेजने का समाधान प्राप्त करें