[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpcomponents-commits
Subject:    [httpcomponents-client] 07/08: RFC 3986 conformance: revised and optimized `URIUtils#extractHost`
From:       olegk () apache ! org
Date:       2020-09-27 10:42:25
Message-ID: 20200927104219.012C5811B2 () gitbox ! apache ! org
[Download RAW message or body]

This is an automated email from the ASF dual-hosted git repository.

olegk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git

commit 6395fa7c79b62f99d0c114702dc0bcc8a5ef97ad
Author: Oleg Kalnichevski <olegk@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")));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic