分别使用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();
}
}
}