web-dev-qa-db-ja.com

javaにURLを構築します

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?を作成できます。クエリ部分で立ち往生しています。私が前進するのを助けてください。

27
rrr ppp

一般的な非Javaの用語では、URLは特殊なタイプのURIです。 URI クラス(Java 1.0以来使用されている由緒あるURLクラスよりも新しい)を使用して、より確実に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はスラッシュで始まる必要があることに注意してください。

13
VGR

そのままのスペックを渡すことができます

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()
48
vsminkov

OkHttpを使用する

GitHubでスター付き20K回された OkHttp という非常に人気のあるライブラリがあります。このライブラリを使用すると、次のような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();
20
Tyler Long