web-dev-qa-db-ja.com

JavaでURLを構築する方法は?

StringBuilderで文字列を作成しています

StringBuilder builder = new StringBuilder();
builder.append("my parameters");
builder.append("other parameters");

次に、URLを作成します

Url url = new Url(builder.toString());

そして、私は接続を試みます

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

しかし、URLは私が得る結果から正しくないようです。一部のパラメーターがfalseで渡されているようです。だからこそ、問題はStringBuilderの一部にあると思います。

問題は、渡そうとする二重パラメーターにあります。

double longitude = 23.433114;
String lng = String.ValueOf(longitude);

そして、私はそれをURLに入れました。しかし、文字列として指定した場合、結果は正しいです。

String lng = "23.433114"

UrlEncodingは必要ですか?以下に提案されていることを試してみます。

34

ApacheのURIBuilderを試してください:[ Documentation ]

import org.Apache.http.client.utils.URIBuilder;

// ...

URIBuilder b = new URIBuilder("http://example.com");
b.addParameter("t", "search");
b.addParameter("q", "apples");

Url url = b.build().toUrl();

Maven依存関係:

<dependency>
    <groupId>org.Apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>
74
jhkuperus

URLを作成してGETリクエストで使用するため、このプロセスに役立つライブラリを使用することをお勧めします。 HttpComponents または nirest のような別のライブラリを使用できます。これは、すべての作業を容易にするHttpComponentsの上に構築されます。

Unirestを使用した例を次に示します。

HttpResponse<String> stringResponse = Unirest.get("https://www.youtube.com/results")
    .field("search_query", "eñe")
    .asString();
System.out.println(stringResponse.getBody());

これは、"eñe"を使用したyoutubeでの検索のすべての結果に対応するHTML応答を取得します。 ñ文字がエンコードされます。

免責事項:私は、いかなる意味でもユニレストに執着していません。私はこのプロジェクトの開発者でもスポンサーでもありません。私はこのフレームワークの唯一の幸せなユーザーです。

4
Luiggi Mendoza