You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2020/09/19 10:29:41 UTC
[httpcomponents-client] branch 5.1.x updated: RFC 3986 conformance:
revised and optimized `URIUtils#extractHost`
This is an automated email from the ASF dual-hosted git repository.
olegk pushed a commit to branch 5.1.x
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git
The following commit(s) were added to refs/heads/5.1.x by this push:
new 9184c46 RFC 3986 conformance: revised and optimized `URIUtils#extractHost`
9184c46 is described below
commit 9184c4693e9ff957f737f95abaa03635ce7a1db9
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Thu Sep 17 11:21:09 2020 +0200
RFC 3986 conformance: revised and optimized `URIUtils#extractHost`
---
.../org/apache/hc/client5/http/utils/URIUtils.java | 57 ++++------------------
.../apache/hc/client5/http/utils/TestURIUtils.java | 4 +-
2 files changed, 11 insertions(+), 50 deletions(-)
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/utils/URIUtils.java b/httpclient5/src/main/java/org/apache/hc/client5/http/utils/URIUtils.java
index bf53275..0f8814f 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/utils/URIUtils.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/utils/URIUtils.java
@@ -250,56 +250,17 @@ public class URIUtils {
if (uri == null) {
return null;
}
- HttpHost target = null;
- if (uri.isAbsolute()) {
- int port = uri.getPort(); // may be overridden later
- String host = uri.getHost();
- if (host == null) { // normal parse failed; let's do it ourselves
- // authority does not seem to care about the valid character-set for host names
- host = uri.getAuthority();
- if (host != null) {
- // Strip off any leading user credentials
- final int at = host.indexOf('@');
- if (at >= 0) {
- if (host.length() > at+1 ) {
- host = host.substring(at+1);
- } else {
- host = null; // @ on its own
- }
- }
- // Extract the port suffix, if present
- if (host != null) {
- final int colon = host.indexOf(':');
- if (colon >= 0) {
- final int pos = colon + 1;
- int len = 0;
- for (int i = pos; i < host.length(); i++) {
- if (Character.isDigit(host.charAt(i))) {
- len++;
- } else {
- break;
- }
- }
- if (len > 0) {
- try {
- port = Integer.parseInt(host.substring(pos, pos + len));
- } catch (final NumberFormatException ex) {
- }
- }
- host = host.substring(0, colon);
- }
- }
- }
- }
- final String scheme = uri.getScheme();
- if (!TextUtils.isBlank(host)) {
- try {
- target = new HttpHost(scheme, host, port);
- } catch (final IllegalArgumentException ignore) {
- }
+ final URIBuilder uriBuilder = new URIBuilder(uri);
+ final String scheme = uriBuilder.getScheme();
+ final String host = uriBuilder.getHost();
+ final int port = uriBuilder.getPort();
+ if (!TextUtils.isBlank(host)) {
+ try {
+ return new HttpHost(scheme, host, port);
+ } catch (final IllegalArgumentException ignore) {
}
}
- return target;
+ return null;
}
/**
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/utils/TestURIUtils.java b/httpclient5/src/test/java/org/apache/hc/client5/http/utils/TestURIUtils.java
index 3706d55..11632a4 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/utils/TestURIUtils.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/utils/TestURIUtils.java
@@ -230,9 +230,9 @@ public class TestURIUtils {
Assert.assertEquals(new HttpHost("localhost",8080),
URIUtils.extractHost(new URI("http://localhost:8080/;sessionid=stuff/abcd")));
- Assert.assertEquals(new HttpHost("localhost",8080),
+ Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://localhost:8080;sessionid=stuff/abcd")));
- Assert.assertEquals(new HttpHost("localhost",-1),
+ Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://localhost:;sessionid=stuff/abcd")));
Assert.assertEquals(null,
URIUtils.extractHost(new URI("http://:80/robots.txt")));