在发起HTTP请求(openConnection() 或者 openStream())之前,加上以下2行代码:

 System.setProperty("proxyHost", PROXY_HOST); // PROXY_HOST:代理的IP地址
System.setProperty("proxyPort", PROXY_PORT); // PROXY_PORT:代理的端口号

如果你的代理不需要通过验证(输入用户名和密码),那么就不用继续往下读了。

★ 代理需要验证

如果你想当然地认为加上以下两行代码就行,那就错了。

 System.setProperty("proxyUser", PROXY_USERNAME); // 或者 System.setProperty("proxyUsername", PROXY_USERNAME);
System.setProperty("proxyPassword", PROXY_PASSWORD);

这时就需要 java.net.Authenticator 类来完成一般的Http验证

在发起请求之前加人如下代码即可:

 Authenticator.setDefault(new BasicAuthenticator(PROXY_USERNAME, PROXY_PASSWORD));

当然,还需要创建一个类 BasicAuthenticator,继承自 java.net.Authenticator

 class BasicAuthenticator extends Authenticator {
private String userName;
private String password; public BasicAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
} /**
* Called when password authorization is needed. Subclasses should
* override the default implementation, which returns null.
*
* @return The PasswordAuthentication collected from the
* user, or null if none is provided.
*/
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password.toCharArray());
}
}

详细代码可参考笔者在GitHub上的代码,包括实现类和测试类:

实现类:
https://github.com/YoungZHU/CollectionCode4Java/blob/master/src/org/young/util/ProxyedURL.java

测试类:

https://github.com/YoungZHU/CollectionCode4Java/blob/master/test/org/young/util/ProxyedURLTest.java

Java-HTTP连接时如何使用代理(一)—— System.Property方式的更多相关文章

  1. Java-HTTP连接时如何使用代理(二)—— Proxy类方式

    阅读这篇文章之前,请先阅读 Java-HTTP连接时如何使用代理(一)——System.Property方式 除了使用 System.setProperty() 的方式之外,还可使用 Proxy 的方 ...

  2. java+selenium3.0 运行时出的问题(system property)!

    按照之前的文章讲解,都已经搭建好了,可是在刚开始运行就报错了,代码和报错如下: WebDriver driver = new ChromeDriver(); driver.get("http ...

  3. JAVA Socket 连接时长

    其实关于这个问题可能用到的人不会很多,不过我在这里还是说说. 正常很多人写socket通信时,都会直接通过new socket(IP,PORT)直接去链接服务器.其实这种做法也没有错误,但是若当服务器 ...

  4. java mysql连接时出现的问题

    当出现Caused by: java.sql.SQLException: Unknown system variable ‘tx_isolation’ 一般是mysql-connector-java的 ...

  5. Java项目启动时执行指定方法的几种方式

    很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等.这里给出几种解决方案供大家参考. 1. 使用@PostConstruct注解 这个注解呢,可以在 ...

  6. java Web 启动时自动执行代码的几种方式

    Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...

  7. java遇到 Check $M2_HOME 问题 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    步骤: 1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk 3.添加 -Dmaven.multiMod ...

  8. Eclipse运行Maven命令时出现:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.问题解决

    错误: -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment varia ...

  9. Java开源连接池c3p0的基本用法

    前言:其实c3p0只是一个实现了javax.sql 接口 DataSource的一个工具集,使用c3p0可以帮我们管理宝贵的Connection资源,无须我们去创建连接(免去每次配置数据库驱动,url ...

随机推荐

  1. loadrunner-增加检查点(web_reg_find)

    接口性能测试地址: http://192.168.x.x:x/tionWeb/Ajax_GetStock.aspx?stockcode=600571 性能测试脚本: Action() { lr_sta ...

  2. hdu 3487 Play with Chain

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3487 YaoYao is fond of playing his chains. He has a c ...

  3. C#异常处理策略

    1.如果某些异常,本组件无法处理,不要捕获,但要声明有这个异常.例如SecurityException. 2.如果某些异常,本组件可以处理,捕获并处理它,不再声明此异常.例如DirectoryNotF ...

  4. JavaScript之表单验证讲解

    JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些 ...

  5. C语言预处理命令

    1.#error Directive (C/C++) The #error directive emits a user-specified error message at compile time ...

  6. Java NIO 与 基于reactor设计模式的事件处理模型

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内 ...

  7. javascript 最常用的技巧整理

    1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu= ...

  8. ID3决策树---Java

    1)熵与信息增益: 2)以下是实现代码: //import java.awt.color.ICC_ColorSpace; import java.io.*; import java.util.Arra ...

  9. 容器字段FieldContainer

    //Ext.form.FieldContainer扩展自Ext.container.Container.当需要把多个字段或组件作为一个表单项展示的时候就需要此组件          Ext.Quick ...

  10. IE6中常见兼容性问题及浏览器显示难题

    1.双倍边距Bug 问题描述:假如有一个ul,里面有若干li,当li设置为左浮动时,此时设置li的margin-left为10px,会在最左侧呈现双倍情况.即20px 正常显示: IE6显示: 修正方 ...