尝试构建
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?
。我被困在查询部分。请帮助我继续前进。
你可以只传递原始规格
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();
有一个非常流行的库,名为 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();
在一般的非 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
需要以斜线开头。
如果您碰巧已经在使用 Spring,我发现
org.springframework.web.util.UriComponentsBuilder
非常漂亮。以下是您在案例中的使用方式。
final URL myUrl = UriComponentsBuilder
.fromHttpUrl("http://IP:4567/foldername/1234?abc=xyz")
.build()
.toUri()
.toURL();
如果您使用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