Java 獲取HTPP 301 / 302 重定向后的Url地址,301和302對SEO的影響
在我們 HTTP 請求的時候,有的時候目標地址發(fā)生了 301 / 302 等狀態(tài)的改變,而改變后的地址我們是不知道的。最近在寫 爬蟲 的時候,爬取 百度 的地址的時候,發(fā)現(xiàn) 百度 是做了 301 到目標地址的,而我想直接得到每個真實的URL地址。通過 測試 ,發(fā)現(xiàn)下面方法是可以的。
代碼:
public static String getReal(String url){
try {
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
HttpParams params = client.getParams();
params.setParameter(AllClientPNames.HANDLE_REDIRECTS, false);
client.executeMethod(method);
String realUrl = method.getURI().getURI();
LoggerUtils.fmtDebug(CLAZZ, "獲取真實的地址成功:%s,原地址是:%s",realUrl,url);
return realUrl;
} catch (Exception e) {
LoggerUtils.fmtError(CLAZZ, "獲取地址失敗,原來的地址是:%s", e,url);
e.printStackTrace();
return "";
}
}從上面可以直接得到真實的domain和queryString。
自己重新看這個地方的時候發(fā)現(xiàn),我沒把依賴包放這里。抱歉?。?!依賴包如下:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>然后LoggerUtils 這個類不用管,直接刪除即可。
301 和 302 的區(qū)別?
一、官方說法。
301 , 302 都是 HTTP 狀態(tài)的編碼,都代表著某個URL發(fā)生了轉(zhuǎn)移,不同之處在于:
- 301 redirect:
301代表永久性轉(zhuǎn)移(Permanently Moved)。 - 302 redirect:
302代表暫時性轉(zhuǎn)移(Temporarily Moved )。
二、實際區(qū)別。
1>.用戶角度。
301 ,302 對用戶來說沒有區(qū)別,他們看到效果只是一個跳轉(zhuǎn),瀏覽器中舊的URL 變成了新的URL 。頁面跳到了這個新的url指向的地方。
2>.對于 搜索引擎 和站長。
建議使用 301 ,如果是用 302 , 搜索引擎 會認為是可疑轉(zhuǎn)向,甚至認為是作弊。
為什么作為作弊?因為當網(wǎng)頁A用 301 重定向 轉(zhuǎn)到網(wǎng)頁B時, 搜索引擎 可以肯定網(wǎng)頁A永久的改變位置,或者說實際上不存在了,搜索引擎就會把網(wǎng)頁B當作唯一有效目標。這樣搜索引擎會把301 后的頁面作為目標頁面。
三、總結。
要是你還是沒明白,那么我就大白話告訴你,當我們平時 重定向 的時候,并沒有留意要給設置狀態(tài),如下代碼( Java 舉例)。
//設置為301
hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
hsResponse.setHeader("Location","/blog/");這樣就設置為 301 了,我們這樣設置表示,以后你什么時候訪問都是跳轉(zhuǎn)到新的 301 后的地址,而 302 是現(xiàn)在跳轉(zhuǎn)到A頁面,有可能明天跳轉(zhuǎn)到B頁面,又可能不跳轉(zhuǎn)了,也就是一個是永久,一個表示不一定。
更多狀態(tài)請看這里:HTTP狀態(tài)碼詳解
版權所屬:SO JSON在線解析
原文地址:http://suancuo.cn/blog/79.html
轉(zhuǎn)載時必須以鏈接形式注明原始出處及本聲明。
如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。
