diff --git a/src/java/org/apache/http/client/params/HttpClientParams.java b/src/java/org/apache/http/client/params/HttpClientParams.java index 9dbf0cc7a..bc4c90ae5 100644 --- a/src/java/org/apache/http/client/params/HttpClientParams.java +++ b/src/java/org/apache/http/client/params/HttpClientParams.java @@ -61,14 +61,6 @@ public class HttpClientParams { */ public static final String CONNECTION_MANAGER_FACTORY = "http.connection-manager.factory"; - /** - * Defines whether authentication should be attempted preemptively. - *

- * This parameter expects a value of type {@link Boolean}. - *

- */ - public static final String PREEMPTIVE_AUTHENTICATION = "http.authentication.preemptive"; - /** * Defines whether redirects should be handled automatically *

@@ -104,6 +96,22 @@ public class HttpClientParams { */ public static final String ALLOW_CIRCULAR_REDIRECTS = "http.protocol.allow-circular-redirects"; + /** + * Defines whether authentication should be handled automatically. + *

+ * This parameter expects a value of type {@link Boolean}. + *

+ */ + public static final String HANDLE_AUTHENTICATION = "http.protocol.handle-authentication"; + + /** + * Defines whether authentication should be attempted preemptively. + *

+ * This parameter expects a value of type {@link Boolean}. + *

+ */ + public static final String PREEMPTIVE_AUTHENTICATION = "http.protocol.authentication-preemptive"; + /** * Defines the name of the cookie specification to be used for HTTP state management. *

@@ -121,6 +129,24 @@ public class HttpClientParams { */ public static final String DEFAULT_HEADERS = "http.default-headers"; + /** + * Defines the default host. The default value will be used if the target host is + * not explicitly specified in the request URI. + *

+ * This parameter expects a value of type {@link HttpHost}. + *

+ */ + public static final String DEFAULT_HOST = "http.default-host"; + + /** + * Defines the default proxy. The default value will be used if the proxy + * information is not explicitly specified in the request route. + *

+ * This parameter expects a value of type {@link HttpHost}. + *

+ */ + public static final String DEFAULT_PROXY = "http.default-proxy"; + private HttpClientParams() { super(); } diff --git a/src/java/org/apache/http/impl/client/DefaultHttpClient.java b/src/java/org/apache/http/impl/client/DefaultHttpClient.java index 4e6071d5e..1825d7089 100644 --- a/src/java/org/apache/http/impl/client/DefaultHttpClient.java +++ b/src/java/org/apache/http/impl/client/DefaultHttpClient.java @@ -244,18 +244,23 @@ public class DefaultHttpClient extends AbstractHttpClient { HttpContext context) throws HttpException { - //@@@ refer to a default HostConfiguration? - //@@@ allow null target if there is a default route with a target? if (target == null) { - throw new IllegalArgumentException + target = (HttpHost) request.getParams().getParameter( + HttpClientParams.DEFAULT_HOST); + } + if (target == null) { + throw new IllegalStateException ("Target host must not be null."); } + HttpHost proxy = (HttpHost) request.getParams().getParameter( + HttpClientParams.DEFAULT_PROXY); + Scheme schm = getConnectionManager().getSchemeRegistry(). getScheme(target.getSchemeName()); // as it is typically used for TLS/SSL, we assume that // a layered scheme implies a secure connection - HttpRoute route = new HttpRoute(target, null, schm.isLayered()); + HttpRoute route = new HttpRoute(target, null, proxy, schm.isLayered()); return new RoutedRequest.Impl(request, route); }