By setting realm as null, the pre-emptive authentication worked! But, it sends a Basic Authorization header even if the URL is protected by Digest! For Digest it is still making 2 trips in order to authenticate. Which is fine for the first request, but it repeats the same thing for the second request as well. Is there a way to tell the state, method or client what kind of scheme is desired for pre-emptive authentication. Sorry, no logs here as log did not work.
>>> [EMAIL PROTECTED] 6/10/2003 3:47:32 AM >>> Zulfi, Try setting both realm & host to null. That should do the trick HttpClient hc = new HttpClient(); HttpState state = hc.getState(); state.setAuthenticationPreemptive(true); // Set default credentials (realm & host are null) state.setCredentials(null, null, new UsernamePasswordCredentials("zulfi", "zulfi")); Folks, The present convention for setting a default set of credentials is utterly confusing and needs to be redesigned in 2.1. I believe we should be using HttpState#setCredentials(HttpAuthRealm, Credentials) instead of HttpState#setCredentials(String, String, Credentials). We should also provide a static final class to represent the default set of credentials: public static final HttpAuthRealm DEFAULT_AUTH_CREDENTIALS = new HttpAuthRealm(null, null); The end user code might look similar to that below state.setCredentials(DEFAULT_AUTH_CREDENTIALS, new UsernamePasswordCredentials("zulfi", "zulfi")); Cheers Oleg -----Original Message----- From: Zulfi Umrani [mailto:[EMAIL PROTECTED] Sent: Tuesday, June 10, 2003 00:44 To: [EMAIL PROTECTED] Subject: preemptive Tried to use the Preemptive Authentication feature. Could not get it to work. I used the HttpState.setAuthenticationPreemptive(true); to set the preemptive authentication ON. It still send the first request without the Authorization header. Code sample is below. Would like to know, how to set up the Pre-emptive Authentication. package test; import java.io.*; import java.net.URL; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.*; import org.apache.commons.httpclient.auth.*; import org.apache.commons.httpclient.util.*; public class JCTest { public static void main(String[] args) throws Exception { test0(); test0(); return; } public static void test0() throws Exception { System.out.println("running test0"); String urlstr = "http://localhost:9999/services1/test"; URL url = new URL(urlstr); HttpClient hc = new HttpClient(); HttpState state = hc.getState(); state.setAuthenticationPreemptive(true); state.setCredentials("", url.getHost(), new UsernamePasswordCredentials("zulfi", "zulfi")); PostMethod post = new PostMethod(urlstr); post.setDoAuthentication(true); post.addRequestHeader("Connection", "Keep-Alive"); post.addRequestHeader("Content-Length", ""+msg.length()); post.addRequestHeader("Content-Type", "text/xml; charset=utf-8"); InputStream reqis = new ByteArrayInputStream(msg.getBytes()); post.setRequestBody(reqis); HostConfiguration hconfig = new HostConfiguration(); hconfig.setHost(new URI(urlstr)); hc.executeMethod(hconfig, post); System.out.println(post.getResponseBodyAsString()); System.out.println(); } private static String msg = "Text Message"; } Thanks. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]