Penyelesaian untuk mendapatkan mesej permintaan HTTP dari hos

Penulis:Mimpi kecil, Dicipta: 2020-09-23 16:24:42, Dikemas kini: 2023-09-27 19:37:55

img

Penyelesaian untuk mendapatkan mesej permintaan HTTP dari hos

Dalam ujian, debugging kod dasar, semasa menjalankan bot pada cakera sebenar, sering terdapat laporan kesalahan antara muka bursa, ketika ini untuk mendapatkan dokumentasi API antara muka bursa, untuk mendapatkan maklumat pelaporan yang berkaitan, ketika menghubungi pelanggan teknikal API bursa, selalu perlu memberikan laporan permintaan ketika pelaporan, untuk menganalisis penyebab pelaporan.

Dalam artikel ini, kita akan membincangkan dua penyelesaian.

1, menggunakan Python untuk mencetak mesej permintaan yang dihantar dengan scapy library scraper

Mulakan dengan memasangscapyModul

pip3 install scapy 

Kemudian, buatlah satu strategi Python:

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")

Kemudian mencipta bot yang menggunakan dasar ini, yang akan merampas pakej http yang dikeluarkan oleh pelayan hostsnya (https tidak dapat merampas ini).

Apabila bot ini berjalan, anda boleh menggunakan alat debugging untuk menghantar permintaan, dan bot itu akan menangkapnya. Dalam alat debugging, anda menulis kod untuk menghantar permintaan.

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

Berita yang dicetak oleh robot rampok:img

Kita boleh menyalin dan lihat berita: Berita yang diminta oleh 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.comAdakah kita boleh mengabaikan, dan yang betul adalah bahawa kita harus mengambil apa yang kita mahu?Host: www.okex.comAnda boleh lihat pautan di dalam surat permintaan:/api/swap/v3/instruments/BTC-USD-SWAP/tickerPada bulan Disember lalu, pihaknya telah membuat satu laporan yang menunjukkan bahawa mereka telah meminta data mengenai pasaran kontrak kekal di tempat BTC.

POST meminta laporan:

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"}

Di sini, anda boleh melihat laluan permintaan:/api/swap/v3/orderSaya tidak tahu apa yang berlaku. Kunci akses yang disahkan:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(Demonstrasi, bukan KEY sebenar) Tanda tangan untuk permintaan ini:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=API KEY Kunci Rahsia Passphrase:abc123(Demonstrasi) Data badan yang diminta:{"aaa":"111","bbb":"222"}

Dengan cara ini, anda boleh melihat mesej permintaan dan menganalisis mengapa permintaan antarmuka mengalami kesalahan.

2. Permintaan pendengaran tempatan

Cara kedua, tanpa perlu membina robot, menggunakan komputer Apple Mac dengan tali pinggang.Netcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdinOleh itu, saya tidak mahu mengkritik mereka.

Dalam terminal, gunakan arahannc -l 8080, yang dijalankan oleh Netcat.

Gambar berikut:img

Begitu juga, kita menggunakan hoster di dalam mesin, dan kemudian dalam alat debugging, menggunakan kod berikut untuk menghantar permintaan.

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 permintaan mesej yang dicetak di terminal:img

Mesej permintaan GET yang dicetak di terminal:img


Berkaitan

Lebih lanjut