我正在用Java寫一個蜘蛛程序,並遇到了一些處理URL重定向的麻煩。目前有兩種URL重定向,第一種是HTTP響應代碼3xx,我可以遵循this answer。通過JavaScript重定向抓取
但第二類是與網頁服務器返回的HTTP響應代碼200包含這樣只有一些JavaScript代碼:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function detectmob() {
var u=(document.URL);
if(navigator.userAgent.match(/Android/i) || some other browser...){
window.location.href="web/mobile/index.php";
} else {
window.location.href="web/desktop/index.php";
}
}
detectmob();
</script>
</head>
<body></body></html>
如果原始URL是http://example.com,然後它會自動重定向到http://example.com/web/desktop/index.php如果我使用啓用了JavaScript的桌面Web瀏覽器。
然而,我的蜘蛛檢查HttpURLConnection#getResponseCode()
,看它是否已被越來越HTTP response code 200
,並使用URLConnection#getHeaderField()
如果接收HTTP response code 3xx
得到Location
場打進決賽URL。以下是我的蜘蛛的代碼片段:
public String getFinalUrl(String originalUrl) {
try {
URLConnection con = new URL(originalUrl).openConnection();
HttpURLConnection hCon = (HttpURLConnection) con;
hCon.setInstanceFollowRedirects(false);
if(hCon.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM
|| hCon.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP) {
System.out.println("redirected url: " + con.getHeaderField("Location"));
return getFinalUrl(con.getHeaderField("Location"));
}
} catch (IOException ex) {
System.err.println(ex.toString());
}
return originalUrl;
}
因此讓上述網頁將有HTTP response code 200
和我的蜘蛛會只是假設不會有進一步的重定向和開始分析這是在長期空頁的內容文字。
我有谷歌這個問題有點和顯然javax.script
是某種相關,但我不知道如何使它的作品。我如何編程我的蜘蛛,以便它能夠獲得正確的URL?