Java 获取HTPP 301 / 302 重定向后的Url地址,301和302对SEO的影响
在我们 HTTP 请求的时候,有的时候目标地址发生了 301 / 302 等状态的改变,而改变后的地址我们是不知道的。最近在写 爬虫 的时候,爬取 百度 的地址的时候,发现 百度 是做了 301 到目标地址的,而我想直接得到每个真实的URL
地址。通过 测试 ,发现下面方法是可以的。
代码:
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
。
自己重新看这个地方的时候发现,我没把依赖包放这里。抱歉!!!依赖包如下:
<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 的区别?
一、官方说法。
301 , 302 都是 HTTP 状态的编码,都代表着某个URL发生了转移,不同之处在于:
二、实际区别。
1>.用户角度。
301
,302
对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL
变成了新的URL
。页面跳到了这个新的url指向的地方。
2>.对于 搜索引擎 和站长。
建议使用 301 ,如果是用 302 , 搜索引擎 会认为是可疑转向,甚至认为是作弊。
为什么作为作弊?因为当网页A用 301 重定向 转到网页B时, 搜索引擎 可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。这样搜索引擎会把301
后的页面作为目标页面。
三、总结。
要是你还是没明白,那么我就大白话告诉你,当我们平时 重定向 的时候,并没有留意要给设置状态,如下代码( Java 举例)。
//设置为301
hsResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
hsResponse.setHeader("Location","/blog/");
这样就设置为 301 了,我们这样设置表示,以后你什么时候访问都是跳转到新的 301 后的地址,而 302 是现在跳转到A页面,有可能明天跳转到B页面,又可能不跳转了,也就是一个是永久,一个表示不一定。
更多状态请看这里:HTTP状态码详解
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/79.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。