Improved proxy request message generation
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
index 7317a0d..fe0d73b 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
@@ -27,8 +27,6 @@
package org.apache.hc.client5.http.impl.async;
import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -62,8 +60,8 @@
import org.apache.hc.core5.http.nio.AsyncEntityProducer;
import org.apache.hc.core5.http.protocol.HttpCoreContext;
import org.apache.hc.core5.http.protocol.HttpProcessor;
+import org.apache.hc.core5.http.support.BasicRequestBuilder;
import org.apache.hc.core5.net.URIAuthority;
-import org.apache.hc.core5.net.URIBuilder;
import org.apache.hc.core5.util.Args;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -119,17 +117,12 @@
final HttpRequest request;
if (proxy != null && !route.isTunnelled()) {
- try {
- URI uri = userRequest.getUri();
- if (!uri.isAbsolute()) {
- uri = new URIBuilder(uri)
- .setHttpHost(target)
- .build();
- }
- request = HttpProxyRequest.rewrite(userRequest, uri);
- } catch (final URISyntaxException ex) {
- throw new ProtocolException("Invalid request URI: " + userRequest.getRequestUri(), ex);
+ final BasicRequestBuilder requestBuilder = BasicRequestBuilder.copy(userRequest);
+ if (requestBuilder.getAuthority() == null) {
+ requestBuilder.setAuthority(new URIAuthority(target));
}
+ requestBuilder.setAbsoluteRequestUri(true);
+ request = requestBuilder.build();
} else {
request = userRequest;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpProxyRequest.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpProxyRequest.java
deleted file mode 100644
index e4ed272..0000000
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpProxyRequest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * ====================================================================
- * 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/>.
- *
- */
-
-package org.apache.hc.client5.http.impl.async;
-
-import java.net.URI;
-import java.util.Iterator;
-
-import org.apache.hc.client5.http.impl.ProtocolSupport;
-import org.apache.hc.core5.http.Header;
-import org.apache.hc.core5.http.HttpRequest;
-import org.apache.hc.core5.http.message.BasicHttpRequest;
-
-class HttpProxyRequest extends BasicHttpRequest {
-
- static HttpProxyRequest rewrite(final HttpRequest original, final URI requestUri) {
- final HttpProxyRequest copy = new HttpProxyRequest(original.getMethod(), requestUri);
- copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
- return copy;
- }
-
- private HttpProxyRequest(final String method, final URI requestUri) {
- super(method, requestUri);
- }
-
- @Override
- public String getRequestUri() {
- return ProtocolSupport.getRequestUri(this);
- }
-
-}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicHttpProxyRequest.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicHttpProxyRequest.java
deleted file mode 100644
index bfeec4a..0000000
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicHttpProxyRequest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * ====================================================================
- * 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/>.
- *
- */
-
-package org.apache.hc.client5.http.impl.classic;
-
-import java.net.URI;
-import java.util.Iterator;
-
-import org.apache.hc.client5.http.impl.ProtocolSupport;
-import org.apache.hc.core5.http.ClassicHttpRequest;
-import org.apache.hc.core5.http.Header;
-import org.apache.hc.core5.http.message.BasicClassicHttpRequest;
-
-class ClassicHttpProxyRequest extends BasicClassicHttpRequest {
-
- static ClassicHttpProxyRequest rewrite(final ClassicHttpRequest original, final URI requestUri) {
- final ClassicHttpProxyRequest copy = new ClassicHttpProxyRequest(original.getMethod(), requestUri);
- copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
- copy.setEntity(original.getEntity());
- return copy;
- }
-
- private ClassicHttpProxyRequest(final String method, final URI requestUri) {
- super(method, requestUri);
- }
-
- @Override
- public String getRequestUri() {
- return ProtocolSupport.getRequestUri(this);
- }
-
-}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
index af79242..9b311cd 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
@@ -28,8 +28,6 @@
package org.apache.hc.client5.http.impl.classic;
import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.Iterator;
import org.apache.hc.client5.http.AuthenticationStrategy;
@@ -59,10 +57,10 @@
import org.apache.hc.core5.http.Method;
import org.apache.hc.core5.http.ProtocolException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
import org.apache.hc.core5.http.protocol.HttpCoreContext;
import org.apache.hc.core5.http.protocol.HttpProcessor;
import org.apache.hc.core5.net.URIAuthority;
-import org.apache.hc.core5.net.URIBuilder;
import org.apache.hc.core5.util.Args;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -124,17 +122,12 @@
try {
final ClassicHttpRequest request;
if (proxy != null && !route.isTunnelled()) {
- try {
- URI uri = userRequest.getUri();
- if (!uri.isAbsolute()) {
- uri = new URIBuilder(uri)
- .setHttpHost(target)
- .build();
- }
- request = ClassicHttpProxyRequest.rewrite(userRequest, uri);
- } catch (final URISyntaxException ex) {
- throw new ProtocolException("Invalid request URI: " + userRequest.getRequestUri(), ex);
+ final ClassicRequestBuilder requestBuilder = ClassicRequestBuilder.copy(userRequest);
+ if (requestBuilder.getAuthority() == null) {
+ requestBuilder.setAuthority(new URIAuthority(target));
}
+ requestBuilder.setAbsoluteRequestUri(true);
+ request = requestBuilder.build();
} else {
request = userRequest;
}