用Java和Nodejs獲取http30X跳轉后的url


用Java和Nodejs獲取http30X跳轉后的url

301永久重定向

定義

301 Moved Permanently 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。

301比較常用的場景是使用域名跳轉。

比如,我們訪問 http://www.baidu.com 會跳轉到 https://www.baidu.com,發送請求之后,就會返回301狀態碼,然后返回一個location,提示新的地址,瀏覽器就會拿着這個新的地址去訪問。

注意: 301請求是可以緩存的, 即通過看status code,可以發現后面寫着from cache。

或者你把你的網頁的名稱從php修改為了html,這個過程中,也會發生永久重定向。

Nginx配置

rewrite后面接上permenent就代表301跳

1
2
3
4
//把來自veryyoung.me的請求301跳到 www.veryyoung.me
if ($host != 'veryyoung.me') {
rewrite ^/(.*)$ http://www.veryyoung.me/$1 permanent;
}

302臨時重定向

定義

302 Found 請求的資源現在臨時從不同的URI響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。

比如未登陸的用戶訪問用戶中心重定向到登錄頁面。

訪問404頁面會重新定向到首頁。

Nginx配置

rewrite后面接上redirect就代表302跳

1
2
3
4
//把來自veryyoung.me的請求302跳到 www.veryyoung.me
if ($host != 'veryyoung.me') {
rewrite ^/(.*)$ http://www.veryyoung.me/$1 redirect;
}

301與302的區別

302重定向只是暫時的重定向,搜索引擎會抓取新的內容而保留舊的地址,因為服務器返回302,所以,搜索搜索引擎認為新的網址是暫時的。

而301重定向是永久的重定向,搜索引擎在抓取新的內容的同時也將舊的網址替換為了重定向之后的網址。

Java實現獲取301或302跳轉后的URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public String findLink(String url) {
String result = null;
try {
URL serverUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();
conn.setRequestMethod("GET");
// 必須設置false,否則會自動redirect到Location的地址
conn.setInstanceFollowRedirects(false);

conn.addRequestProperty("Accept-Charset", "UTF-8;");
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
conn.connect();
String location = conn.getHeaderField("Location");
int code = conn.getResponseCode();
if (code == 301 || code == 302) {
location = findLink(location);
} else {
location = conn.getURL().toString();
}
result = location;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}

用NodeJs實現獲取301或302跳轉后的URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var request = require('request');

var find_link = function (link, collback) {

var f = function (link) {
var options = {
url: link,
followRedirect: false,
headers : {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept-Charset': 'UTF-8;',
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8',
}
}

request(options, function (error, response, body) {
console.log(response.statusCode);
if (response.statusCode == 301 || response.statusCode == 302) {
var location = response.headers.location;
console.log('location: ' + location);
f(location);
} else {
//console.log(body);
collback(link);
}
})
}

f(link);
}

find_link("http://a.m.taobao.com/i538372076663.htm?&sid=7ac494a5aa270ce9562feadef7423650", function(link){
console.log(link);
});
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM