5获取http请求头_获取托管者发送http请求报文的解决方案
在測試、調(diào)試策略代碼時、實盤運行機(jī)器人時經(jīng)常有遇到交易所接口報錯的情況,此時去查詢交易所接口API文檔,查詢相關(guān)報錯信息,咨詢交易所API技術(shù)客服時總是需要提供報錯時的請求報文,用來分析報錯原因。這個時候看不到報文信息就無從下手找問題,本篇文章我們一起來探討兩種解決方案。
1、使用Python的scapy庫抓包打印出發(fā)送的請求報文
首先安裝scapy模塊
pip3 install scapy然后創(chuàng)建一個python策略:
from scapy.all import *def Method_print(packet):ret = "n".join(packet.sprintf("{Raw:%Raw.load%}").split(r"rn"))Log(ret)sniff(iface='eth0',prn=Method_print,lfilter=lambda p: "GET" in str(p) or "POST" in str(p),filter="tcp")然后創(chuàng)建一個使用該策略的機(jī)器人,該機(jī)器人就會抓取所屬托管者的服務(wù)器發(fā)出的http包(https的抓不到對此有一些處理)。運行起來這個抓包機(jī)器人,然后就可以用調(diào)試工具發(fā)送請求,讓機(jī)器人抓包了。在調(diào)試工具中我們寫入發(fā)送請求的代碼。
function main(){// 要把基地址設(shè)置為其它http協(xié)議的地址,如果不設(shè)置交易所的地址一般都是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() }抓包機(jī)器人打印的信息:
我們可以復(fù)制出來看一下報文,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: gzipHost: www.baidu.com是我們?yōu)榱四茏サ桨牡?#xff0c;可以忽略,正確的應(yīng)該是Host: www.okex.com可以看到請求報文中的鏈接為:/api/swap/v3/instruments/BTC-USD-SWAP/ticker,是要請求BTC本位的永續(xù)合約行情數(shù)據(jù)。
POST請求報文:
1、請求路徑為:/api/swap/v3/order。
2、驗證的Access key : d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (演示用,并非真KEY)
3、本次請求的簽名:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=
4、API KEY 秘鑰Passphrase:abc123 (演示用)
5、請求的Body數(shù)據(jù):{"aaa":"111","bbb":"222"}。
這樣就可以觀察請求報文了,分析接口請求遇到報錯的原因。
2、本地監(jiān)聽請求
第二種方法,不需要創(chuàng)建機(jī)器人,使用蘋果電腦Mac自帶的Netcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin 。監(jiān)聽請求,并打印報文。
在終端,使用命令nc -l 8080,運行起來Netcat。如圖:
同樣我們在本機(jī)部署一個托管者,然后在調(diào)試工具中,使用如下代碼發(fā)送請求。
終端上打印出來的POST請求報文:
終端上打印出來的GET請求報文:
總結(jié)
以上是生活随笔為你收集整理的5获取http请求头_获取托管者发送http请求报文的解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项城弘扬装饰公司怎么样?
- 下一篇: golang mongodb or条件_