Skip to content

Commit 0e6d451

Browse files
authored
fix: disable uri normalization in ApacheHttpRequest (#804)
* fix: disable uri normalization in ApacheHttpRequest * test: add in-memory, local webserver for testing requested url * fix: use try-with-resources on OutputStream * fix: provide port of 0 to let InetSocketAddress pick a port
1 parent 41f6a2f commit 0e6d451

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ final class ApacheHttpRequest extends LowLevelHttpRequest {
4040
// disable redirects as google-http-client handles redirects
4141
this.requestConfig = RequestConfig.custom()
4242
.setRedirectsEnabled(false)
43+
.setNormalizeUri(false)
4344
// TODO(chingor): configure in HttpClientBuilder when available
4445
.setStaleConnectionCheckEnabled(false);
4546
}

google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,17 @@
2222
import static org.mockito.Mockito.mock;
2323
import static org.mockito.Mockito.when;
2424

25+
import com.google.api.client.http.GenericUrl;
2526
import com.google.api.client.http.LowLevelHttpResponse;
2627
import com.google.api.client.util.ByteArrayStreamingContent;
28+
import com.sun.net.httpserver.HttpExchange;
29+
import com.sun.net.httpserver.HttpHandler;
30+
import com.sun.net.httpserver.HttpServer;
2731
import java.io.IOException;
32+
import java.io.OutputStream;
33+
import java.net.InetSocketAddress;
2834
import java.nio.charset.StandardCharsets;
35+
import java.util.Random;
2936
import java.util.concurrent.atomic.AtomicBoolean;
3037
import java.util.concurrent.atomic.AtomicInteger;
3138
import org.apache.http.Header;
@@ -175,4 +182,33 @@ public void process(HttpRequest request, HttpContext context)
175182
}
176183
assertTrue("Expected to have called our test interceptor", interceptorCalled.get());
177184
}
185+
186+
@Test
187+
public void testNormalizedUrl() throws IOException {
188+
HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
189+
server.createContext(
190+
"/",
191+
new HttpHandler() {
192+
@Override
193+
public void handle(HttpExchange httpExchange) throws IOException {
194+
byte[] response = httpExchange.getRequestURI().toString().getBytes();
195+
httpExchange.sendResponseHeaders(200, response.length);
196+
try (OutputStream out = httpExchange.getResponseBody()) {
197+
out.write(response);
198+
}
199+
}
200+
});
201+
server.start();
202+
203+
ApacheHttpTransport transport = new ApacheHttpTransport();
204+
GenericUrl testUrl = new GenericUrl("http://localhost/foo//bar");
205+
testUrl.setPort(server.getAddress().getPort());
206+
com.google.api.client.http.HttpResponse response =
207+
transport
208+
.createRequestFactory()
209+
.buildGetRequest(testUrl)
210+
.execute();
211+
assertEquals(200, response.getStatusCode());
212+
assertEquals("/foo//bar", response.parseAsString());
213+
}
178214
}

0 commit comments

Comments
 (0)