用Head方法获得百度搜索结果的真实地址

用Head方法获得百度搜索结果的真实地址

在百度中搜索“Java”,第一条结果的链接为:

https://www.baidu.com/link?url=HBOOMbhPKH4SfI0vCLVSSJ3W1eNGX1wjwg6q4hna6L3&wd=&eqid=f7bdf9e40005b5820000000357e76187

因此需要设法将其转换为真实的网站链接:http://www.java.com/
736108-20160925135732431-537617278.png

思路很简单:

  1. 使用 HTTP HEAD方法 ,会返回302 Move Permanently
  2. 在Respons Headers中查看Location中的内容,即为要跳转到的真实地址。

使用命令行工具HttpIE试验如下:

E:\>http head https://www.baidu.com/link?url=HBOOMbhPKH4SfI0vCLVSSJ3W1eNGX1wjwg6q4hna6L3&wd=&eqid=f7bdf9e40005b5820000000357e76187
HTTP/1.1 302 Moved Temporarily
BDPAGETYPE: 3
Cache-Control: no-cache, must-revalidate
Connection: keep-alive
Content-Length: 215
Content-Type: text/html;charset=utf8
Date: Sun, 25 Sep 2016 05:40:07 GMT
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Location: http://www.java.com/
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDSVRTM=0; path=/
X-UA-Compatible: IE=Edge,chrome=1
X-XSS-Protection: 1;mode=block

最后编写Java代码如下:

public static String getRealLinkFromBaiduLink(String link){
    // 需要注意的是,这里必须 disableRedirectHandling,否则会自动进行地址的跳转
    CloseableHttpClient httpClient = HttpClients.custom().disableRedirectHandling().build();
    // 这里可以使用Http Head 方法
    HttpHead httpHead = new HttpHead(link);
    try (CloseableHttpResponse response = httpClient.execute(httpHead)) {
        int status = response.getStatusLine().getStatusCode();
        if (status == 302) {
            return response.getFirstHeader("Location").getValue();
        } else {
            return null;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  

转载于:https://www.cnblogs.com/xiaff/p/get_real_link_from_baidu_search_result.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值