도커에서 전송된 http 요청 메시지를 얻는 솔루션

저자:리디아, 창작: 2022-11-10 20:49:38, 업데이트: 2023-09-14 20:36:06

img

전략 코드를 테스트하고 디버깅하거나 실제 봇에서 로봇을 실행할 때, 교환 인터페이스는 종종 오류를 보고합니다. 이 시점에서 관련 오류 정보를 검색하기 위해 교환 인터페이스 API 문서로 이동하십시오. 교환 API 기술 고객 서비스를 상담할 때, 오류의 원인을 분석하기 위해 오류가 보고되면 항상 요청 메시지를 제공해야합니다.

이 때, 메시지 정보를 보지 않고 문제를 찾을 방법이 없습니다. 이 기사에서는 두 가지 해결책을 함께 논의 할 것입니다.

1. 파이썬의 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(){
    // 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=API KEY 비밀 키 암호 문장:abc123(만 예시용) 요청된 기관의 데이터:{"aaa":"111","bbb":"222"}

이렇게 하면 요청 메시지를 관찰하고 인터페이스 요청이 오류를 일으키는 이유를 분석할 수 있습니다.

2. 지역 청취 요청

두 번째 방법은 로봇을 만들 필요가 없습니다.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


더 많은