我不確定標題是否有意義。我對這種東西不是很有經驗。
情況是這樣的:
我正在使用 Ubuntu 20.04 運行 Linux 服務器
我通過 .sh 腳本運行一個程式,用于從不同的 URL 抓取網頁。
一個 url 回傳一個像這樣開頭的檔案:
{"javaClass":"java.util.ArrayList","list":[
我不確定這是 Java Class 檔案還是 JSON 檔案,因為 url 沒有擴展名。
我可以在我的瀏覽器中呼叫這個 url,它會顯示為文本。(這就是為什么我可以看到上面的代碼。)
如果我在 Ubuntu 終端中用 curl 呼叫它,它什么都不做。
如何在 Ubuntu 終端中以純文本形式顯示和讀取它以處理資料,就像我在 Chrome 瀏覽器中所做的那樣?
編輯:有問題的網址是這樣的:https : //www.yes.co.il/o/yes/servletlinearsched/getscheduale?startdate=20211025&p_auth=w3wmBNc5
EDIT2:最后的令牌每次都不同。我讀對了令牌,所以這不是問題。
我發現該站點請求 x-dtpc cookie。我發現這個關于 x-dtpc cookie:
此標頭由 XHR 上的 JavaScript 代理設定,用于將 XHR 請求與用戶操作相關聯
當我打開頁面并從開發者控制臺獲取 url 時,我可以在新選項卡中打開該 url。如果我通過腳本獲取 url,則無法在瀏覽器中打開該 url。
我加載了標準 cookie,但顯然這還不夠。
uj5u.com熱心網友回復:
這是“序列化”工具的輸出(將記憶體中的物件轉換為可以通過網路傳輸或存盤在磁盤上的基于位元組的表示),具體來說,將 ArrayList 序列化為 JSON 格式。
使用 java 代碼閱讀此內容的最佳方法是找出使用了哪個工具,并使用相同的工具。它沒有融入 Java 本身;它是一些第三方庫,例如杰克遜。
我所知道的所有這些工具都有一個“硬編碼”的特殊例外,用于任何擴展java.util.List(例如 ArrayList),只需將其視為普通的 JSON 串列。所以,我對這里使用了什么工具有點困惑。
但是,要么 [A] 找到該工具,要么 [B] 對輸出進行逆向工程。
注意:通常這樣的序列化工具會在 JSON 中同時表示類名和每個欄位。但是, ArrayList 中的相關欄位被呼叫elementData而不是list。那是另一個進一步揚起的眉毛:這太奇怪了。
uj5u.com熱心網友回復:
在 Chrome 開發工具中,您可以右鍵單擊特定請求并復制相應的 cURL。當我打開頁面時,創建了以下命令:
curl 'https://www.yes.co.il/o/yes/servletlinearsched/getscheduale' \
-H 'authority: www.yes.co.il' \
-H 'sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"' \
-H 'dnt: 1' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36' \
-H 'x-dtpc: 1$418482539_291h9vJHPPKPVFOURUFMBUBCNHWPOEEHUEJATA-0e5' \
-H 'accept: text/plain, */*; q=0.01' \
-H 'x-requested-with: XMLHttpRequest' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'sec-ch-ua-platform: "macOS"' \
-H 'origin: https://www.yes.co.il' \
-H 'sec-fetch-site: same-origin' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-dest: empty' \
-H 'referer: https://www.yes.co.il/content/tvguide' \
-H 'accept-language: en-US,en;q=0.9,de;q=0.8' \
-H 'cookie: TS01be6705=01ef05715da91cbd2bd3d3708b62fc37483302654019cffd2d42c61fe786389bea0697bdddc6cfaa989d8e83d7ecaf362d163c3ba4d4cc2cb2171d826bc2189e24b33b372f; COOKIE_SUPPORT=true; GUEST_LANGUAGE_ID=iw_IL; rxVisitor=1635415629464DQEQ6RQ2S8SQQ1QCFS5J66I2US8LK1NG; _gcl_au=1.1.2116753794.1635415632; _gid=GA1.3.1516801157.1635415633; dtSa=-; _ga=GA1.3.1003301072.1635415633; LFR_SESSION_STATE_33706=1635417685179; JSESSIONID=B399B241579DB87AF9FEC02AD72D62CF.worker_ip-10-0-3-108.eu-west-1.compute.internal; dtCookie==3=srv=1=sn=BF10E6A2EFEE80BE2CAD31F302CAF608=perc=100000=ol=0=mul=1=app:e6d1c681b48e20c9=0; _ga_H6Z9EGVSQX=GS1.1.1635418482.2.0.1635418482.0; dtLatC=14; AWSALB=1Ky1qIweYH/VBDu2pUv/DACVcWq5dmx3PPhlghfLR0g4oNTdMV78d7G08LreVX0l2Lvm0wdW5oRh 3j THyZKDQmVldChB6XScu8 BVkqbSymgNrvMm4dOdT6TNL; AWSALBCORS=1Ky1qIweYH/VBDu2pUv/DACVcWq5dmx3PPhlghfLR0g4oNTdMV78d7G08LreVX0l2Lvm0wdW5oRh 3j THyZKDQmVldChB6XScu8 BVkqbSymgNrvMm4dOdT6TNL; TS01542e32=01ef05715d1819fe7529d33b6e77731cfbb0015d8964ad5bb6c2e651cbb0a0a4b1882c8fa451246095770e14517339cd0a68861c971608fb5c8f0731d6c968c519acbcd35ea68d53e6fc4ceb067d99238c1dfce91a494ac4abf599a7d66a54b92c363e5c1b004d2d59e86f6198819dd2f1b43c0191; dtPC=1$418482539_291h9vJHPPKPVFOURUFMBUBCNHWPOEEHUEJATA-0e5; rxvt=1635420284821|1635415629471' \
--data-raw 'startdate=20211028&p_auth=c43Cdm7P' \
--compressed
大多數標題似乎不太相關,因此我能夠將其歸結為
curl --location --request POST 'https://www.yes.co.il/o/yes/servletlinearsched/getscheduale' \
--header 'content-type: application/x-www-form-urlencoded' \
--header 'cookie: JSESSIONID=B399B241579DB87AF9FEC02AD72D62CF.worker_ip-10-0-3-108.eu-west-1.compute.internal;' \
--data-urlencode 'startdate=20211028' \
--data-urlencode 'p_auth=c43Cdm7P'
然而,JSESSIONIDcookie 是由對頁面的初始請求設定的,并可能由進一步的請求更新。這就是為什么一個請求只在有限的時間內有效而不使用新的會話 ID。您的抓取工具必須從之前的請求中提取會話 ID 并使用此 ID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/340180.html
