最近在做一个爬虫项目,需要抓取一些网站的资讯和其中的图片,抓取过程中发现有一些图片链接会重定向,而服务器存储时不支持重定向,于是想尝试直接拿到重定向的链接。
借助Chrome浏览器的开发者工具(快捷键F12),选择Network -> Headers,可以看到其重定向后的地址在Response Headers中的Location属性中。

查阅资料文档可知,
1.类HttpURLConnection提供了如下方法:

public void setInstanceFollowRedirects(boolean followRedirects)

Sets whether HTTP redirects (requests with response code 3xx) should be automatically followed by this HttpURLConnection instance.
The default value comes from followRedirects, which defaults to true.
Parameters:
followRedirects a boolean indicating whether or not to follow HTTP redirects.

2.其父类URLConnection有如下方法:

public String getHeaderField(String name)

Returns the value of the named header field.
If called on a connection that sets the same header multiple times with possibly different values, only the last value is returned.
Parameters:

HttpURLConnection 编程基础原理 在Android中, HttpURLConnection 是比较基础的网络编程,因此在入门的时候建议大家学会使用这个编程,有助于大家了解其原理。这里就简单介绍一下,因为我们这篇博客主要解决的问题是如何解决收到结果不是200,-------------- 而是302 定向问题。使用 HttpURLConnection 编程原理我们编程时候遵循一下几个步骤: 处理方法:当 HTTP 响应返回状态码为 3xx 定向时,服务器通常会在响应头中包含 "Location" 字段,指示客户端应该 定向到的新的URL地址。这只是一些常见的状态码示例,HTTP 协议还定义了其他状态码用于特定的情况。起因:客户给了一个外网图片路径,需要将外网图片上传到对象存储中,但是发现上传到对象存储中了,但是下载下来的图片是破损的。或其他相关库进行 HTTP 请求时,可以根据返回的状态码来判断请求的结果,并根据需要采取相应的处理措施。3xx: 定向状态码,表示需要进一步操作才能完成请求。 HttpURLConnection 获取 定向地址和cookie的代码如下:public void first() throws Exception{ Map paramsHashMap = new HashMap(); paramsHashMap.put("IF_NO", "IF0002"); paramsHashMap.put("UID", "12345"); 当使用 HttpURLConnection 访问 A地址,但是A地址内部会自动 定向到B地址,因为我们是会 HttpURLConnection 方式 访问 接口 ,故我们应用无法直接 定向到B地址,此时需要我们通过 HttpURLConnection 获取 定向后的B地址返回给前端,让前端去 访问 B地址,达到跳转的目的。(对于页面表单 访问 A地址的话,浏览器会自动帮我们 定向到B地址,完成 定向过程) 一、该方式可以获... private void requestNetData () { try { URL url = new URL("http://www.toutiao.com/stream/widget/local_weather/data/?city=%E5%8C%97%E4%BA%AC"); HttpURLConnection urlConnection = (HttpURLConnecti... HttpURLConnection 使用中的一个问题,就是当连接到的那个地址 定向到另一个地址时,怎么样获得那个 定向后的地址,弄了一下,找出了方法,结果起先我们两个都没想到,嘿嘿,在此记录一下。 HttpURLConnection 是基于HTTP协议的,其底层通过socket通信实现。下面来看一个例子:   今天跟TiGERTiAN谈到 HttpURLConnection 使用中的一个问题,就是当连接... * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @param encode URLConnection从HTTP 定向到HTTPS  也不知什么原因,公司项目的服务端一直在吸引着大波攻击,于是服务端的同学打算把所有HTTP的请求都换为HTTPS,他们决定兼容旧版本于是就将之前的所有HTTP请求全部 定向到另一个HTTPS请求。 项目请求框架搭建初期,考虑到应用也不会使用太复杂的请求模式,于是就简单使用URLConnection完成服务端交互。服务端一修改,全部请求都失败了 String url ="http://.。。。.com"; // 获取文件流 con = ( HttpURLConnection ) new URL(url).openConnection(); con.setConnectTimeout(15000); con.setReadTimeout(15000); con.setInstanceFollowRedirects(false); 当我们通过一个url去 访问 一个路径的时候,资源可能已经不在了 服务器要告诉浏览器请求的资源在哪个地方,这时候就会用到Redirect 定向 如果我们已经指定某个资源对应一个url,当你搬动资源后,不能直接废弃这个url 废弃之后,直接会返回404资源不存在了,你应该告诉浏览器资源在哪里,也就是 定向 server.js const http = require('http'); http.createServer((req, res) => HttpURLConnection 的跟随 定向仅是一个指标,实际上它不能帮助您进行“真正的” http 定向,您仍然需要手动处理它。 URL obj = new URL(url); HttpURLConnection conn = ( HttpURLConnection ) obj.openConnection(); conn.setInstanceFollowRedirects(tru...