도커 Http 요청 메시지를 얻는 솔루션

저자:니나바다스, 창작: 2022-04-27 10:55:50, 업데이트: 2022-04-27 10:57:37

도커 Http 요청 메시지를 얻는 솔루션

전략 코드를 테스트하고 디버깅하거나 실제 시장에서 봇을 실행할 때, 플랫폼 인터페이스는 종종 오류가 보고됩니다. 이 시점에서 플랫폼 인터페이스 API 문서를 검색하고 관련 오류 보고 정보를 검색하고 항상 오류 요청 메시지를 제공해야합니다. 플랫폼 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 패킷을 캡처합니다 (https는 패킷을 캡처할 수 없습니다.

패킷 캡처 봇을 실행하면 디버깅 툴을 사용하여 요청을 보낼 수 있습니다. 디버깅 툴에서는 요청을 보낼 수 있는 코드를 작성합니다.

function main(){
    // The base address should be set to the address of other http protocols. If the address of a platform is not set, it is generally https, so the packet 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(데모용, 진짜 KEY가 아닌) 이 요청에 대한 서명:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY 비밀번호:abc123(데모용) 요청된 기관 데이터:{"aaa":"111","bbb":"222"}.

따라서 우리는 요청 메시지를 관찰하고 인터페이스에서 발생하는 오류의 원인을 분석할 수 있습니다.

2. 지역 청취자 의 요청

두 번째 해결책은 로봇을 만들지 않고NetcatMac 시스템과 함께 제공되는: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 modify the base address to the local, port 8080, and then Netcat can listen to the requests 
    // 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


더 많은