Java设置代理方式

 使用Java的HttpURLConnection类可以实现HttpClient的功能,而不需要依赖任何其他类库。所有有时候大家就直接使用它来完成一些简单(或复杂)的功能。但是你活在伟大的{print G.F.W}后面,如果你需要访问的网站被墙了,那HttpURLConnection类就会出现连接超时的错误。这时候就需要给他设置代理(Proxy)了。

      设置代理(Proxy)可以有两种方式:

      1、通过设置系统属性(System.setPropery(String key, String value)的方式

      首先你可以在这里看到Java支持的属性。我们可以使用其中的http.proxyHost,http.proxyPort这两个属性。顾名思义,就是分别设置代理服务器地址和代理端口。

     

[c-sharp]  view plain  copy
 print ?
  1. //在你发起Http请求之前设置一下属性  
  2. System.setProperty("http.proxyHost""www.proxy.com");  
  3. System.setProperty("http.proxyPort""8080");  

      替换上面的www.proxy.com为你的代理服务器地址或IP地址,以及相应的端口为真实端口,Http连接及可以工作了。需要注意的是如果你设置了这些属性,那么所有的Http请求都会通过代理服务器。这些属性是JVM级别的,设置了以后对所有的同类请求都有效。比如上面的是关于http的,还有关于ftp的等等。

      如果你的代理服务器不需要验证,那到此就结束了。但一般都是需要验证的。但是你要是看了上面Java支持的属性列表,你就会发现那里面并没有期望中的

      

[c-sharp]  view plain  copy
 print ?
  1. http.proxyUserName=username  
  2. http.proxyPassword=password  
 这两个属性。 这时就需要java.net.Authenticator类来完成一般的Http验证。但是java.net.Authenticator这个类却是个抽象类,我们要使用还需要实例化一下子自己的类。个人觉得这里很不方便。如下:

     

[java]  view plain  copy
 print ?
  1. public class BasicAuthenticator extends Authenticator {  
  2.     String userName;  
  3.     String password;  
  4.   
  5.     public BasicAuthenticator(String userName, String password) {  
  6.         this.userName = userName;  
  7.         this.password = password;  
  8.     }  
  9.   
  10.     /** 
  11.      * Called when password authorization is needed.  Subclasses should 
  12.      * override the default implementation, which returns null. 
  13.      * 
  14.      * @return The PasswordAuthentication collected from the 
  15.      *         user, or null if none is provided. 
  16.      */  
  17.     @Override  
  18.     protected PasswordAuthentication getPasswordAuthentication() {  
  19.         return new PasswordAuthentication(userName, password.toCharArray());  
  20.     }  
  21. }  

       我们需要覆盖java.net.Authenticator类的getPasswordAuthentication()方法,并返回一个PasswordAuthentication实例。要使他起作用,还需要设置

     

[java]  view plain  copy
 print ?
  1. Authenticator.setDefault(new BasicAuthenticator(userName, password));  

      这样就提供了基于Http Basic的验证,接着就可以顺畅的使用需要验证的代理了。 

      2、通过java.net.Proxy类。

      这种方式是实例化一个Proxy类提供代理服务器的信息,如端口和地址。

     

[java]  view plain  copy
 print ?
  1. Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));  
  2. URLConnection conn = url.openConnection(proxy);  

      使用代理的方式是在打开Http连接的时候同时传递一个Proxy参数。如果需要验证信息的话我们可以添加一个Http头参数来实现。

     

[java]  view plain  copy
 print ?
  1. //格式如下:  
  2. "Proxy-Authorization""Basic Base64.encode(user:password)"  
  3. String headerKey = "Proxy-Authorization";  
  4. String headerValue = "Basic " + Base64.encode(user+":"+password);  
  5. conn.setRequestProperty(headerKey, headerValue);  
  6.   
  7. //..........  

      其中的Base64.encode(user:password)是指把用户名和密码用冒号连接起来之后使用Base64编码后的值作为值的一部分。  

      通过这种方式只影响特定的Http连接,但是需要对代码进行修改。这种方式下是否可以使用Authenticator还未做验证。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值