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

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

301永久重定向

定義

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

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

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

注意: 301請求是能夠緩存的, 即經過看status code,能夠發現後面寫着from cache。node

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

Nginx配置

rewrite後面接上permenent就表明301跳github

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跳app

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);
});
 
 
 
相關文章
相關標籤/搜索