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

लेखक:FMZ~Lydia, बनाया गयाः 2022-11-10 20:49:38, अद्यतन किया गयाः 2023-09-14 20:36:06

Solution to Get the http Request Message Sent by the Docker

रणनीति कोड का परीक्षण और डिबगिंग करते समय, या वास्तविक बॉट पर रोबोट चलाते समय, एक्सचेंज इंटरफ़ेस अक्सर त्रुटियों की रिपोर्ट करता है। इस समय, संबंधित त्रुटि जानकारी की क्वेरी करने के लिए एक्सचेंज इंटरफ़ेस एपीआई दस्तावेज़ पर जाएं। एक्सचेंज एपीआई तकनीकी ग्राहक सेवा से परामर्श करते समय, आपको हमेशा त्रुटि के कारण का विश्लेषण करने के लिए त्रुटि की रिपोर्ट होने पर अनुरोध संदेश प्रदान करने की आवश्यकता होती है।

इस समय, संदेश जानकारी को देखे बिना समस्याओं को खोजने का कोई तरीका नहीं है। इस लेख में, हम दो समाधानों पर एक साथ चर्चा करेंगे।

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

पैकेज पकड़ने वाले रोबोट द्वारा मुद्रित जानकारीःSolution to Get the http Request Message Sent by the Docker

हम कॉपी कर सकते हैं और संदेश देख सकते हैंः 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 
We can see the link in the request message is: ```/api/swap/v3/instruments/BTC-USD-SWAP/ticker```, it is to request the BTC native perpetual contract market data.

POST request message:

पोस्ट /api/swap/v3/order HTTP/1.1 होस्टः www.baidu.com उपयोगकर्ता-एजेंटः मोज़िला/5.0 (मैकिनटोश; इंटेल मैक ओएस एक्स 10_9_3) AppleWebKit/537.36 (केएचटीएमएल, जैक की तरह) क्रोम/35.0.1916.153 सफारी/537.36 सामग्री-लंबाईः 25 सामग्री-प्रकारः आवेदन/json; charset=UTF-8 ओके-एक्सेस-कीः d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 ओके-एक्सेस-पासफ्रेज़ः abc123 ओके-एक्सेस-साइनः h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= ओके-एक्सेस-टाइमस्टैम्पः 2020-09-23T08:43:49.906Z स्वीकार-कोडिंगः gzip

{aaa:111,bbb:222}

We can see the request path is: ```/api/swap/v3/order```.
Verified Access Key: ```d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4``` (For demonstration only, not the real KEY)
Signature of the request: ```h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=```
API KEY secret key--Passphrase: ```abc123``` (For demonstration only)
Requested Body data: ```{"aaa":"111","bbb":"222"}```。

In this way, we can observe the request message and analyze the reason why the interface request encounters an error.

### 2. Local listening request
The second method does not need to create a robot, just uses the ```Netcat``` that comes with the Mac: https://baike.baidu.com/item/Netcat/9952751?fr=aladdin. Monitor the requests and print messages.

On the terminal, run Netcat with the command ```nc - l 8080```.

As the picture below:
![Solution to Get the http Request Message Sent by the Docker](/upload/asset/28d7f2156cdb996092a8a.png)

Similarly, we deploy a docker on our computer, and then use the following code to send requests in the debugging tool.

मुख्य कार्य exchange.SetBase(http://127.0.0.1:8080) // यहाँ, हम स्थानीय मशीन के लिए आधार पते को बदलने, बंदरगाह 8080, और Netcat अनुरोध प्राप्त कर सकते हैं // POST अनुरोध exchange.IO ((api, POST, /api/swap/v3/order, aaa=111&bbb=222)

// GET request
exchange.SetContractType("swap")
exchange.GetTicker()

} ` टर्मिनल पर मुद्रित POST अनुरोध संदेशःSolution to Get the http Request Message Sent by the Docker

टर्मिनल पर मुद्रित GET अनुरोध संदेशःSolution to Get the http Request Message Sent by the Docker


अधिक जानकारी