JAVA使用爬虫代理的方案
2019-03-01 17:34
211 查看
Connection
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.util.Random;
class ProxyAuthenticator extends Authenticator { private String user, password; public ProxyAuthenticator(String user, String password) { this.user = user; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, password.toCharArray()); } } /** * 注意:下面代码仅仅实现HTTP请求链接,每一次请求都是无状态保留的,仅仅是这次请求是更换IP的,如果下次请求的IP地址会改变 * 如果是多线程访问的话,只要将下面的代码嵌入到你自己的业务逻辑里面,那么每次都会用新的IP进行访问,如果担心IP有重复, * 自己可以维护IP的使用情况,并做校验。 */ public class Demo { public static void main(String args[]) throws Exception { // 要访问的目标页面 String targetUrl = "http://httpbin.org/ip"; // 代理服务器 String proxyServer = "t.16yun.cn"; int proxyPort = 31111; // 代理隧道验证信息 String proxyUser = "username"; 4000 String proxyPass = "password"; try { URL url = new URL(targetUrl); Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPass)); // 创建代理服务器地址对象 InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort); // 创建HTTP类型代理对象 Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // 设置通过代理访问目标页面 HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy); // 设置Proxy-Tunnel // Random random = new Random(); // int tunnel = random.nextInt(10000); // connection.setRequestProperty("Proxy-Tunnel",String.valueOf(tunnel)); // 解析返回数据 byte[] response = readStream(connection.getInputStream()); System.out.println(new String(response)); } catch (Exception e) { System.out.println(e.getLocalizedMessage()); } } /** * 将输入流转换成字符串 * * @param inStream * @return * @throws Exception */ public static byte[] readStream(InputStream inStream) throws Exception { ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); } }
相关文章推荐
- 如何使用http/https代理ip 纯手工浏览器(ie 360 谷歌 遨游等等)使用代理Ip 爬虫(python java)如何使用代理ip 附加免费代理ip池
- java爬虫(使用jsoup设置代理,抓取网页内容)
- 浅析分布式爬虫使用代理IP的几种方案
- Spring Boot + Java爬虫 + 部署到Linux (三、Java爬虫使用代理,模拟登录,保存cookie)
- nodejs使用爬虫代理的方案
- Java爬虫(五)-- httpClient进阶:使用代理(详细解析)
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP(转)
- Java动态代理一——动态类Proxy的使用
- 使用JAVA中的动态代理实现数据库连接池 Z
- 使用JAVA的动态代理实现数据库连接池
- 在B/S模式下使用java代理导入excel文件的实现方法及代码
- 使用 JAVA 中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- Java路径问题最终解决方案使用演示
- 如何使用Proxy模式及Java内建的动态代理机制
- 使用JAVA中的动态代理实现数据库连接池
- Domino使用Java代理的注意事项
- java使用代理访问网络
- 使用自动生成java文件和自动编译的动态代理模式
- java学习笔记——使用JDBC,对数据库进行增删改查(方案一)【推荐】