在java中构建URL

问题描述 投票:0回答:6

尝试构建

http://IP:4567/foldername/1234?abc=xyz
。我对此不太了解,但我通过谷歌搜索编写了以下代码:

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

public class MyUrlConstruct {

    public static void main(String a[]){

        try {
            String protocol = "http";
            String host = "IP";
            int port = 4567;
            String path = "foldername/1234";
            URL url = new URL (protocol, host, port, path);
            System.out.println(url.toString()+"?");
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
    }
}

我能够构建 URL

http://IP:port/foldername/1234?
。我被困在查询部分。请帮助我继续前进。

java url build
6个回答
76
投票

你可以只传递原始规格

new URL("http://IP:4567/foldername/1234?abc=xyz");

或者您可以采用类似

org.apache.http.client.utils.URIBuilder
的内容并使用正确的 url 编码以安全的方式构建它

URIBuilder builder = new URIBuilder();
builder.setScheme("http");
builder.setHost("IP");
builder.setPath("/foldername/1234");
builder.addParameter("abc", "xyz");
URL url = builder.build().toURL();

36
投票

使用 OkHttp

有一个非常流行的库,名为 OkHttp,它在 GitHub 上已被加星标 20K 次。使用这个库,您可以构建如下所示的 url:

import okhttp3.HttpUrl;

URL url = new HttpUrl.Builder()
    .scheme("http")
    .host("example.com")
    .port(4567)
    .addPathSegments("foldername/1234")
    .addQueryParameter("abc", "xyz")
    .build().url();

或者你可以简单地解析一个URL:

URL url = HttpUrl.parse("http://example.com:4567/foldername/1234?abc=xyz").url();

30
投票

在一般的非 Java 术语中,URL 是一种特殊类型的 URI。您可以使用 URI 类(它比古老的 URL 类更现代,它从 Java 1.0 就已经存在)来更可靠地创建 URI,并且可以使用 URI 的 toURL 方法将其转换为 URL :

String protocol = "http";
String host = "example.com";
int port = 4567;
String path = "/foldername/1234";
String auth = null;
String fragment = null;
URI uri = new URI(protocol, auth, host, port, path, query, fragment);
URL url = uri.toURL();

请注意,

path
需要以斜线开头。


12
投票

如果您碰巧已经在使用 Spring,我发现

org.springframework.web.util.UriComponentsBuilder
非常漂亮。以下是您在案例中的使用方式。

final URL myUrl = UriComponentsBuilder
        .fromHttpUrl("http://IP:4567/foldername/1234?abc=xyz")
        .build()
        .toUri()
        .toURL();

11
投票

使用 Spring 框架:

UriComponentsBuilder.newInstance()
  .scheme(scheme)
  .host(host)
  .path(path)
  .build()
  .toUri()
  .toURL();

新的

UriComponentsBuilder
类有助于创建
UriComponents
通过提供对各个方面的细粒度控制来实现实例 准备 URI,包括构造、从模板扩展 变量和编码。

了解更多...

JavaDoc


1
投票

如果您使用Android,则可以使用

Uri.Builder
API。示例:

val uri = Uri.Builder().scheme("https").authority("s3.amazonaws.com").appendEncodedPath(bucketName).appendEncodedPath(fileName).build()

文档:

https://developer.android.com/reference/android/net/Uri.Builder

© www.soinside.com 2019 - 2024. All rights reserved.