分别使用HttpClient和httpunit处理HTTP Basic Authentication验证登录

  • 使用HttpClient处理HTTP Basic Authentication验证登录:

 /*
 * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/examples/BasicAuthenticationExample.java,v 1.4 2004/06/12 22:47:23 olegk Exp $
 * $Revision$
 * $Date$
 * ====================================================================
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 * [Additional notices, if required by prior licensing conditions]
 *
 */


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
 
/**
 * A simple example that uses HttpClient to perform a GET using Basic
 * Authentication. Can be run standalone without parameters.
 *
 * You need to have JSSE on your classpath for JDK prior to 1.4
 *
 * @author Michael Becke
 */
public class DDNSBasicAuthentication {
 
    /**
     * Constructor for BasicAuthenticatonExample.
     */
    public DDNSBasicAuthentication() {
        super();
    }
 
    public static void main(String[] args) throws Exception {
        HttpClient client = new HttpClient();
 
        // pass our credentials to HttpClient, they will only be used for
        // authenticating to servers with realm "realm" on the host
        // "www.verisign.com", to authenticate against
        // an arbitrary realm or host change the appropriate argument to null.
        client.getState().setCredentials(
            new AuthScope(www.searchfull.net, 8080, "TP-LINK SOHO Router R402M"),
            new UsernamePasswordCredentials("username", "password")
        );
 
        // create a GET method that reads a file over HTTPS, we're assuming
        // that this file requires basic authentication using the realm above.
        GetMethod get = new GetMethod("http://itindex.net/");
 
        // Tell the GET method to automatically handle authentication. The
        // method will use any appropriate credentials to handle basic
        // authentication requests.  Setting this value to false will cause
        // any request for authentication to return with a status of 401.
        // It will then be up to the client to handle the authentication.
        get.setDoAuthentication( true );
 
        try {
            // execute the GET
            int status = client.executeMethod( get );
 
            // print the status and response
            System.out.println(status + "\n" + get.getResponseBodyAsString());
 
        } finally {
            // release any connection resources used by the method
            get.releaseConnection();
        }
       
        GetMethod get2 = new GetMethod("http://itindex.net/userRpm/StatusRpm.htm");
        get2.setDoAuthentication( true );
       
        try {
            // execute the GET
            int status = client.executeMethod( get2 );
 
            // print the status and response
            System.out.println(status + "\n" + get2.getResponseBodyAsString());
 
        } finally {
            // release any connection resources used by the method
            get2.releaseConnection();
        }
       
    }
}

  •   使用httpunit处理HTTP Basic Authentication验证登录,

需要将httpunit源代码里的com.meterware.httpunit.WebClient.java类里的下面这行注释掉:
//throw new AuthorizationRequiredException( response.getHeaderField( "WWW-Authenticate" ) );

import com.meterware.httpunit.*;

/** This is a simple example of using HttpUnit to read and understand web pages. **/
public class LoginRoute {


    public static void main( String[] params ) {
        try {
            // create the conversation object which will maintain state for us
            WebConversation wc = new WebConversation();

 

           
            HttpUnitOptions.setScriptingEnabled(false);//禁用javascript
            HttpUnitOptions.setAcceptCookies(true);
            String credit = "username" + ":" + "password";
            String encoding = new sun.misc.BASE64Encoder().encode (credit.getBytes());
     
           

            // Obtain the main page on the meterware web site
            WebRequest request = new GetMethodWebRequest( "http://itindex.net/" );
           
            request.setHeaderField("Authorization", "Basic " + encoding);
          
            
            WebResponse response = wc.getResponse( request );

            // find the link which contains the string "HttpUnit" and click it
            WebLink httpunitLink = response.getFirstMatchingLink( WebLink.MATCH_CONTAINED_TEXT, "HttpUnit" );

            // print out the number of links on the HttpUnit main page
            System.out.println( "The HttpUnit main page contains " + response.getLinks().length + " links" );
           
            System.out.println(response.getText());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

你可能感兴趣的:(java)