> Please Could any body tell me how to set the authentication type
to
> Digest at the
> first time itself(without asking for 407) in case proxy authentication.
no way. Digest Auth is a challenge-response authentication scheme.
You *need* a challenge from the server, there is no way around it.
cheers,
Roland
OK, so the first page in realm requires the challenge-response -- but what
about the following pages? I need to access pages on a web-server/device that
appears to only challenge on the /index.html page. It will not reply with the
contents of any other page if the request for it doesn't have the
Authorization: Digest username="****" ...
request header. I see this from sniffing out the headers when connected to
the device via firefox or IE. Oleg said in an earlier reply, only Basic can be
preemptive -- but is that for just the first page? The
request-challenge-request is fine for the first page. Please, someone, tell me
how to make the HTTPClient "remember" it already has the
Authorization from the previous request! I've been at this for a while...
If it helps, here is the sample code I'm using, it is a slightly revamped
BasicAuthenticationExample.java. I get the first page fine. Sniffing the
headers I see it trying Basic first, despite asking for Digest. OK fine, but
the second get also tries Basic first, forgetting all about the authorization
it already figured out in the first request! The result is this particular
device will reply with an error page asking you to come in through the front
door. I'm not doing anything bad -- I'm just trying to automate what is
currently a web page only device initialization.
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;
/**
* Uses HttpClient to perform a GET using Digest
* Authentication for the index.html and pre-emptive
* authorization for the menu.html.
*/
public class getFirst2
{
final static private String gIp = "192.168.0.1";
final static private int gPort = 4242;
final static private String gDefUser = "admin";
final static private String gDefPassWord = "admin";
final static private String gRealm = "Fubar Device";
/**
* Constructor for getFirst2.
*/
public getFirst2() {
super();
}
public static void main(String[] args) throws Exception {
HttpClient client = new HttpClient();
client.getParams().setAuthenticationPreemptive(true);
java.util.List<String> authPrefs = new java.util.ArrayList<String>(1);
authPrefs.add(org.apache.commons.httpclient.auth.AuthPolicy.DIGEST);
client.getParams().setParameter(
org.apache.commons.httpclient.auth.AuthPolicy.AUTH_SCHEME_PRIORITY,
authPrefs);
// pass our credentials to HttpClient, they will only be used for
// authenticating to servers with given realm on the host.
client.getState().setCredentials(
new AuthScope(gIp, gPort, gRealm),
new UsernamePasswordCredentials(gDefUser, gDefPassWord)
);
// create a GET method
GetMethod get = new GetMethod("http://" + gIp + ":" + gPort + "/");
// Tell the GET method to automatically handle authentication.
get.setDoAuthentication( true );
try {
// execute the GET
System.out.println( "Getting " + get.getURI() + "\n" );
int status = client.executeMethod( get );
// print the status and response
System.out.println(status + "\n" + get.getResponseBodyAsString());
//client.getState().setAuthenticationPreemptive(true);
get = new GetMethod("http://" + gIp + ":" + gPort + "/menu.htm");
// execute the GET
System.out.println( "Getting " + get.getURI() + "\n" );
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();
}
}
}
thanks!
Chuck
---------------------------------
The fish are biting.
Get more visitors on your site using Yahoo! Search Marketing.