code: public static UriComponentsBuilder fromHttpUrl(String httpUrl) {
  		Assert.notNull(httpUrl, "'httpUrl' must not be null");
  		Matcher matcher = HTTP_URL_PATTERN.matcher(httpUrl);
  		if (matcher.matches()) {
  			UriComponentsBuilder builder = new UriComponentsBuilder();
  			String scheme = matcher.group(1);
  			builder.scheme(scheme != null ? scheme.toLowerCase() : null);
  			builder.userInfo(matcher.group(4));
  			String host = matcher.group(5);
  			if (StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) {
  				throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL");
  			}
  			builder.host(host);
  			String port = matcher.group(7);
  			if (StringUtils.hasLength(port)) {
  				builder.port(port);
  			}
  			builder.path(matcher.group(8));
  			builder.query(matcher.group(10));
  			return builder;
  		}
  		else {
  			throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL");
  		}
  	}
docs: Creates a new {@code UriComponents} object from the string HTTP URL.
  <p><strong>Note:</strong> The presence of reserved characters can prevent
  correct parsing of the URI string. For example if a query parameter
  contains {@code '='} or {@code '&'} characters, the query string cannot
  be parsed unambiguously. Such values should be substituted for URI
  variables to enable correct parsing:
  <pre class="code">
  String uriString = &quot;/hotels/42?filter={value}&quot;;
  UriComponentsBuilder.fromUriString(uriString).buildAndExpand(&quot;hot&amp;cold&quot;);
  </pre>
  @param httpUrl the source URI
  @return the URI components of the URI