• 用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);
    });
     
     
     
  • 相关阅读:
    常用的CSS命名规则 (web标准化设计)
    有哪些概率论和数理统计的深入教材可以推荐?
    CV2X国内现状分析
    隐私计算,新能源汽车“安全上路”的“救命稻草”?
    2022年中国车联网行业全景图谱
    2022年十大AI预测:气候独角兽涌现、中美竞争加剧
    OSEK/VDX介绍
    Adaptive Autosar
    基于我国商密算法的车联网5GV2X通信安全可信体系
    行研篇 | 汽车域控制器研究
  • 原文地址:https://www.cnblogs.com/it-tsz/p/12026803.html
Copyright © 2020-2023  润新知