package http; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.function.Function; class PdfUtil { public void getPdffrom302(String url, String filePath, Function<String, String> changeUtil){ try { System.out.println("访问地址:" + url); //发送get请求 URL serverUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection(); conn.setRequestMethod("GET"); //必须设置false,否则会自动redirect到重定向后的地址 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.addRequestProperty("Referer", "http://matols.com/"); conn.connect(); //判定是否会进行302重定向 if (conn.getResponseCode() == 302) { //如果会重定向,保存302重定向地址,以及Cookies,然后重新发送请求(模拟请求) String location = conn.getHeaderField("Location"); location = changeUtil.apply(location); String cookies = conn.getHeaderField("Set-Cookie"); serverUrl = new URL(location); conn = (HttpURLConnection) serverUrl.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Cookie", cookies); 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.addRequestProperty("Referer", "http://matols.com/"); conn.connect(); System.out.println("跳转地址:" + location); } //将返回的输入流转换成字符串 InputStream is = conn.getInputStream(); File f = new File(filePath); OutputStream os = new FileOutputStream(f); byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); } os.flush(); is.close(); os.close(); // 释放资源 } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { PdfUtil p= new PdfUtil(); String url="http://www "; p.getPdffrom302(url,"1.pdf", new Function<String, String>() { public String apply(String location) { return location.replace("files.xxxx.com", "128.0.0.1"); } }); } }
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>