`
hao861002
  • 浏览: 87387 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HttpClient认证(3)

阅读更多

清单 2. HttpClient 中自定义 SSL 示例

                // 1
SecureProtocolSocketFactory sampleSSLSocketFactory = new SampleSSLSocketFactory();
               // 2
Protocol httpsProtocol = new Protocol("https", sampleSSLSocketFactory, 443);
 // 3
Protocol.registerProtocol("https", httpsProtocol);
 HttpClient client = new HttpClient();
 client.getState().setCredentials(
    new AuthScope("www.sample.com", 80, AuthScope.ANY_REALM),
    new UsernamePasswordCredentials("username", "password")
);
         // Request the protected resource via SSL
GetMethod get = new GetMethod("https://www.sample.com/protected.html");
 get.setDoAuthentication( true );
 try {
    int status = client.executeMethod( get );
     // process the content from the response
    
} finally {
    get.releaseConnection();
}

 

使用 Apache HttpClient 通过 Form-Based 认证

Form-Based 认证相对 HTTP Basic 认证而言过程较为复杂,需要开发者记录下相关的 cookie 信息和部分 header 字段并多次向站点发出请求。它的大致原理如下:

注意:不同的应用可能有不同的配置方式,开发者可以先在浏览器中手动访问受保护资源,获取 login.jsp。进行分析后即可获知对应的认证服务资源 j_security_check 的位置以及对应的用户名与密码在表单中的字段。

假定我们需要访问的受保护资源为 http://www.sample.com/sampleApp/sample.rss。首先我们需要向此保护资源发出请求。而由 Form-Based 认证原理一节中可知,J2EE 服务器会将此请求重定向至 login.jsp。如果仔细分析 login.jsp 我们能发现它仅仅是一个 HTML 表单,其中有两个字段 j_username j_password 分别记录用户名和密码,而提交的目标则是 j_security_check。通常情况下,J2EE 构架会在每个站点应用的根节点定义一个 j_security_check 的资源。而我们的站点的应用程序根(Application Root)为 sampleApp。因而,通过将用户名,密码以及相关 cookie header 字段以 POST 方式发送至 http://www.sample.com/sampleApp/j_security_check 即可通过站点认证。在通过站点认证后,服务器端将给出一个新的重定向,通常它将指向了用户最初试图访问的受保护资源(本例中也就是 http://www.sample.com/sampleApp/sample.rss)。我们只需要再次创建访问对象向此资源发出请求即可获得其内容。

以下给出一个示例:


清单 3. Form-Based 认证示例

HttpClient client = new HttpClient();
client.getState().setCookiePolicy(CookiePolicy.COMPATIBILITY);
 // 1
GetMethod authget = new GetMethod("httpwww.sample.comsampleAppsample.rss");
try {
    client.executeMethod(authget);
}
catch (HttpException httpe) {
    httpe.printStackTrace();
}
catch (IOException ioe) {
    ioe.printStackTrace();
}
 // 2
NameValuePair[] data = new NameValuePair[2];
data[0] = new NameValuePair("j_username", username);
data[1] = new NameValuePair("j_password", password);
 PostMethod authpost = new PostMethod("http://www.sample.com/sampleApp/j_security_check");
authpost.setRequestBody(data);
 // 3
Header hCookie = authget.getRequestHeader("Cookie");
Header hHost = authget.getRequestHeader("Host");
Header hUserAgent = authget.getRequestHeader("User-Agent");
if (hCookie == null || hHost == null || hUserAgent == null) {
    return null;
}
 authpost.setRequestHeader(hCookie);
authpost.setRequestHeader(hHost);
authpost.setRequestHeader(hUserAgent);
 authget.releaseConnection();
 try {
    client.executeMethod(authpost);
     // 4
    Header header = authpost.getResponseHeader("location");
    if (header != null) {
        String newuri = header.getValue(); 
        GetMethod redirect = new GetMethod(newuri);
         client.executeMethod(redirect); 
        // process the content from the response
        redirect.releaseConnection();            
    }
} catch (HttpException httpe) {
    httpe.printStackTrace();
    return null;
} catch (IOException ioe) {
    ioe.printStackTrace();
    return null;
}
authpost.releaseConnection();

 

其中各个步骤解释如下:

1.                   使用 GET 方式请求 sample.rss。服务器收到连接后将在响应中给出连接信息,HttpClient 在接收到响应后会将其保存至 cookie 中。

2.                   准备第二次对 j_security_check 的连接,将用户名和密码填入新的 POST 请求的正文。

3.                   cookie 和部分 header 字段拷贝至新请求的报头中,并发送请求。

4.                   从认证成功的响应中获取重定向,并对重定向指向的资源发出请求,获取并处理内容。

分享到:
评论

相关推荐

    HttpClient 3.x to HttpComponents HttpClient 4.x

    在HttpClient 3.x中,可以设置代理认证、状态管理和连接管理等操作,这些操作在4.x版本中有新的实现方式。程序员需要掌握如何使用`Credentials`和`AuthScope`来处理认证,以及如何配置代理服务器。 此外,迁移指南...

    httpclient4.5 绕过ssl认证文件访问

    3. **配置HttpClient**:将自定义的SSLContext应用到HttpClient的HttpConnectionFactory。 ```java import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache....

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...

    httpclient.jar包下载

    3. **身份验证和安全**:HttpClient支持多种身份验证机制,包括基本认证、摘要认证、NTLM等,并且可以与SSL/TLS协议结合,确保数据传输的安全性。 4. **重试和恢复策略**:HttpClient内置了重试和恢复策略,当网络...

    httpClient需要的jar包

    6. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证、NTLM等。同时,它也可以处理HTTPS连接,配置SSL上下文以实现安全通信。 7. **异步编程**:HttpClient 4.5及以上版本引入了...

    httpclient-4.5.3中文版文档,很实用

    4. **认证和授权**:HttpClient支持多种认证机制,包括基本认证、摘要认证、NTLM和Kerberos,以及自定义认证策略。对于授权,它可以处理质询-响应认证流程。 5. **重试策略**:通过`HttpRequestRetryHandler`接口,...

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    总结来说,处理需要客户端认证的HTTPS接口需要理解SSL/TLS协议、HttpClient的内部工作原理以及如何自定义安全配置。通过`InstallCert.java`和`HTTPSSecureProtocolSocketFactory.java`这两个文件,我们可以实现这个...

    HttpClient3.1 学习整理

    在处理需要登录和认证的网页时,HttpClient3.1 提供了支持。它允许你在发送请求前进行身份验证,通过设置`CredentialsProvider`来存储用户名和密码,并使用`PreemptiveAuthentication`策略,使得服务器在请求头中就...

    java,HttpClient模拟上传,绕过SSL认证

    接下来,我们需要创建一个HttpClient实例,同时配置它跳过SSL认证。这可以通过自定义`SSLContext`和`TrustStrategy`实现: ```java import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import ...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    2. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证等。同时,它也支持HTTPS,提供了SSL/TLS的安全传输。 3. **重定向处理**:HttpClient可以自动处理HTTP状态码3xx的重定向,也可以手动控制...

    Httpclient依赖包

    3. **身份验证**:HttpClient支持多种身份验证机制,包括基本认证、摘要认证、NTLM、Kerberos等,能够处理跨域和多层代理的认证问题。 4. **Cookie管理**:HttpClient内置了Cookie管理器,可以处理服务器返回的...

    httpclient-4.5.3 api 中文版

    3. **执行器服务(Executor Service)**:HttpClient 4.5引入了`Executors`概念,提供了一种灵活的方式来配置和控制执行HTTP请求的线程池。这有助于处理并发请求,并确保资源的有效利用。 4. **重试处理(Retry ...

    httpclient

    3. **创建HttpClient对象**:配置好SSLContext后,将其应用到HttpClient实例上。使用`SSLConnectionSocketFactory`和`RegistryBuilder`来创建自定义的连接工厂。 ```java CloseableHttpClient httpClient = ...

    httpclient4.5 jar包

    3. **HttpClient 4.5的连接管理** HttpClient 4.5引入了`PoolingHttpClientConnectionManager`,它负责管理连接池,自动回收和复用连接。通过配置最大连接数、每个路由的最大连接数以及连接超时等参数,可以有效...

    httpclient4.3工具类

    7. **认证和安全**:HttpClient支持基本认证、NTLM、Kerberos等多种认证机制,并且可以处理HTTPS连接,确保数据传输的安全。 8. **多部分表单提交(Multipart Form Data)**:对于POST请求,特别是上传文件时,...

    httpclient4.1.2.zip

    在身份验证方面,HttpClient 4.1.2支持多种认证机制,如Basic认证、Digest认证、NTLM认证等。开发者只需提供相应的认证信息,HttpClient就能自动处理认证过程。 HttpClient 4.1.2也提供了对HTTPS的支持,包括证书...

    commons-httpclient.rar

    6. **身份验证**:HttpClient支持多种身份验证机制,如基本认证、NTLM认证、digest认证等,可用于与需要身份验证的服务器通信。 7. **SSL/TLS支持**:HttpClient能够处理HTTPS连接,支持SSL和TLS安全协议,确保数据...

    httpClienthttpClient

    9. **Authentication**:HttpClient支持多种认证机制,包括基本认证、NTLM、Kerberos等,可以使用`CredentialsProvider`和`Authenticator`进行配置。 10. **Timeouts**:可以设置连接超时、读取超时和写入超时,以...

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

Global site tag (gtag.js) - Google Analytics