這兩個請求有什么區別,雖然它們應該是相同的,但導致它們從服務器得到不同的結果/回應?
- 簡單點擊/導航后Chrome發起的請求(成功,回應碼為302)
- 我只是將該請求復制為 curl 并將其匯入 Postman,然后 postman 被絞死
我對 Java 做了同樣的事情 - HttpUrlConnection(模仿 Chrome 發送的所有請求標頭和 cookie),但它掛起并永遠等待。這僅僅是因為不接受非瀏覽器客戶端的服務器邏輯嗎?
以下是我嘗試的步驟:
1. Visited this link: https://www.tokopedia.com/p/handphone-tablet/handphone
2. I opened the inspector and opened the Network - All tab
3. I clicked one of the products
4. I clicked the top request from the Network - All tab
5. I copied it as cURL bash
6. I imported it to Postman
7. I ran that request
8. Postman hanged
uj5u.com熱心網友回復:
實際上,這個問題甚至可能比其他答案所說的更深入。
因此,無論是 User-Agent 請求標頭還是 telnet 都無法解決該問題(除非您也使用 telnet 手動初始化 TLS 握手,但這幾乎不可能完成)。
TLS指紋識別
如果連接是 SSL/TLS 連接,服務器可以檢測使用哪種演算法來生成密鑰,并且大多數應用程式都有其特定的簽名/密碼。
因此,僅通過 TLS 握手,您就可以將 Chrome 與 Postman、FireFox 或 Java 區分開來。Java 通常 - 除非 JVM 實作真的想要越野 - 在所有平臺上具有相同的簽名,在所有實作中使用相同的密碼/演算法。
很抱歉,我無法正確地回憶起這種技術的名稱。我知道發布的第一個專案稱為“A3”或“S3”。Salesforce 發表了一篇關于JA3分析的文章。他們描述了該技術并顯示了簽名和應用程式的串列,因此您可以猜測您正在使用的應用程式,甚至不需要解密資料:https : //engineering.salesforce.com/tls-fingerprinting-with-ja3 -and-ja3s-247362855967
我的解決方案
我也有同樣的問題,想掃描 NVidia 或 AMD 服務器以了解顯卡的可用性。沒有從 Java 作業,所以經過大量研究,找到了上面提到的專案,我只是使用 Selenium 來控制 FireFox 并獲得正確的服務器回應,我通過這種方式實作了我的目標。
uj5u.com熱心網友回復:
確保發送完全相同的資料的唯一方法是通過 telnet 之類的工具自己手動發送。我曾經遇到過類似的問題 - 結果是瀏覽器將資料分成一大塊,而我的代碼則是逐行發送。沒有任何網站應該有這個問題,但它可能存在。
uj5u.com熱心網友回復:
服務器可能正在檢查User-Agent 請求標頭,并將阻止不是來自瀏覽器的流量。嘗試將curl或您的 Java 代碼中的標頭設定為與(任何)瀏覽器對應的值。我在一些電子商店和商業網站上遇到過這種行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372888.html
上一篇:洗掉mysql資料庫中的重復項
