`
ganqing1234
  • 浏览: 171776 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)

 
阅读更多

转自:

http://blog.csdn.net/redhat456/article/details/6149774

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

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

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

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

 

  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支持的属性列表,你就会发现那里面并没有期望中的

 

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

 

 

  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实例。要使他起作用,还需要设置

 

  1. Authenticator.setDefault(new BasicAuthenticator(userName, password));  

 

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

      2、通过java.net.Proxy类。

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

 

  1. Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));  
  2. URLConnection conn = url.openConnection(proxy);  

 

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

 

  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还未做验证。

分享到:
评论

相关推荐

    java实现多次HttpURLConnection共享session

    在Java编程中,HTTPURLConnection是Java标准库提供的一种用于处理HTTP连接的类,它允许我们发送HTTP请求并接收响应。然而,HTTP协议本身是无状态的,这意味着每次请求都是独立的,不会记住之前的交互,这对于需要...

    Java中使用IE Proxy代理的方法

    本文将详细介绍如何在Java中使用IE Proxy代理来实现这一功能。 首先,我们需要理解Java中的网络访问机制。Java使用`java.net`包中的`Socket`和`HttpURLConnection`等类来处理网络通信。当程序运行时,它会使用系统...

    JAVA通过HttpURLConnection 上传和下载文件的方法

    HttpURLConnection是Java中的一个类,用于从网络中读取数据或向网络中写入数据。它可以用于发送HTTP请求,例如GET、POST、PUT、DELETE等。HttpURLConnection可以模拟浏览器的行为,向服务器发送请求,并获取服务器的...

    JavaProx多项目多工程代理HttpUrlConnection

    在Java编程环境中,多项目多工程的代理设置是一项常见的需求,尤其在进行网络请求时,如使用HttpUrlConnection。这个场景通常涉及到多个独立的开发项目或模块,它们可能需要通过同一代理服务器访问互联网资源,或者...

    httpProxy-java

    总的来说,"httpProxy-java"项目涉及的是使用Java实现HTTP代理服务的技术,涵盖了网络编程、HTTP协议、多线程以及可能的额外功能如性能优化和安全控制。通过对这些项目的研究和学习,开发者可以深入理解HTTP代理的...

    TestWebPage:Java代码基于Java HttpURLConnection类测试https代理设置

    用于基于Java HttpURLConnection类测试https代理设置的Java代码。 该代码实际上可以连接到任何URL,但仅响应https.proxyUser和https.ProxyPassword系统属性。 用法: $ java <java> -jar testwebpage.jar sherif@...

    Java自带的HttpURLConnection访问接口实现文件上传

    在Java中,我们首先创建HttpURLConnection实例,设置连接属性,例如设置请求方法为POST,设置允许输入和输出流,并启用自动重定向。 ```java URL url = new URL("http://server.com/upload"); HttpURLConnection ...

    HttpURLConnection文件下载\httpURLConnection文件下载

    `HttpURLConnection`是Java标准库中的一个类,用于处理HTTP协议的请求和响应。在Java中,如果需要从网络上下载文件,`HttpURLConnection`是一个常见的选择,它提供了与HTTP服务器进行通信的能力,包括发送请求、接收...

    使用Proxy创建代理服务器

    和`http.proxyPort`,以指示HttpURLConnection使用我们创建的代理服务器。 4. **转发请求**: 将从客户端接收到的HTTP请求数据写入HttpURLConnection的OutputStream,模拟客户端向目标服务器发送请求。 5. **接收...

    使用HttpURLConnection下载图片

    在Java编程中,`HttpURLConnection`是用于处理HTTP协议的核心类,它提供了向网络资源发起请求并接收响应的能力。在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。...

    java LAN使用代理服务器

    在Java编程环境中,当需要通过局域网(LAN)进行网络通信时,有时会遇到需要使用代理服务器的情况。代理服务器可以提供多种功能,包括提高访问速度、缓存、过滤网络内容以及匿名上网等。本文将深入探讨如何在Java中...

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    `HttpURLConnection`是Java标准库提供的一种轻量级的HTTP客户端,它允许我们在后台代码中发送GET和POST请求。本篇文章将深入讲解如何使用`HttpURLConnection`类来模拟浏览器请求,并通过实例展示其在接口调用中的...

    https/http 的调用类和代理proxy调用类

    代理支持通常通过Java的`Proxy`类和`ProxySelector`接口来实现,这些可以设置到`HttpURLConnection`或HttpClient中,使得网络请求通过代理服务器转发。 3. **SSL/TLS客户端**: `SSLClient.java`文件则专注于处理...

    java HttpURLConnection工具

    java HttpURLConnection示例 HttpURLConnection工具

    java HttpURLConnection 使用示例

    Java中的`HttpURLConnection`是Java标准库中用于执行HTTP请求的核心类,它是`java.net`包的一部分。在本文中,我们将深入探讨`HttpURLConnection`的使用,包括GET和POST请求的实现,以及如何处理可能出现的乱码问题...

    远程连接服务器HttpURLConnection

    在Java编程中,`HttpURLConnection`是用于执行HTTP协议操作的核心类,它是`java.net.URLConnection`的一个子类。这个类允许我们与远程服务器进行各种HTTP通信,包括发送GET、POST请求,上传文件,以及处理响应。在...

    CUrl类是以命令行工具CUrl为参考使用标准Java的HttpURLConnection实现的Http工具类

    Java标准库中的HttpURLConnection是Java内置的处理HTTP请求的API,但它使用起来相对复杂,需要处理很多细节,如设置请求方法、添加请求头、管理连接等。CUrl类则通过封装这些复杂的操作,使得开发者能够更简单、直观...

    Java 中HttpURLConnection附件上传的实例详解

    Java 中HttpURLConnection附件上传的实例详解是指通过使用Java语言中的HttpURLConnection类来实现附件上传的功能。本文将详细介绍HttpURLConnection附件上传的实例详解的相关知识点。 一、HttpURLConnection简介 ...

    【Java】java.net.HttpURLConnection的使用.doc

    在Java编程中,`java.net.HttpURLConnection`是用于处理HTTP协议的基本类,它提供了一种与HTTP服务器通信的简单方式。下面将详细讲解如何使用`HttpURLConnection`进行网页内容获取、Cookie管理以及POST方式的数据...

    Java的HttpURLConnection的封装类

    用于对基于HTTP的服务进行抓取 HttpClient 现在是HttpComponents 把问题搞复杂了 其实Java内置的HttpURLConnection很好的 内含文档 使用方法见http: blog csdn net jdgdf566 article details 16357677

Global site tag (gtag.js) - Google Analytics