JavaでURLまたはURIを作成するにはどうすればよいですか?慣用的な方法、またはこれを簡単に行うライブラリはありますか?
リクエスト文字列から開始し、さまざまなURL部分(スキーム、ホスト、パス、クエリ文字列)を解析/変更し、クエリパラメータの追加と自動エンコードをサポートする必要があります。
JavaでURLまたはURIを作成するにはどうすればよいですか?慣用的な方法、またはこれを簡単に行うライブラリはありますか?
リクエスト文字列から開始し、さまざまなURL部分(スキーム、ホスト、パス、クエリ文字列)を解析/変更し、クエリパラメータの追加と自動エンコードをサポートする必要があります。
回答:
Apache HTTPコンポーネントHttpClient 4.1.3以降、公式チュートリアルから:
public class HttpClientTest {
public static void main(String[] args) throws URISyntaxException {
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("q", "httpclient"));
qparams.add(new BasicNameValuePair("btnG", "Google Search"));
qparams.add(new BasicNameValuePair("aq", "f"));
qparams.add(new BasicNameValuePair("oq", null));
URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search",
URLEncodedUtils.format(qparams, "UTF-8"), null);
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());
//http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq=
}
}
編集:v4.2の時点でURIUtils.createURI()
非推奨になりましたURIBuilder
:
URI uri = new URIBuilder()
.setScheme("http")
.setHost("www.google.com")
.setPath("/search")
.setParameter("q", "httpclient")
.setParameter("btnG", "Google Search")
.setParameter("aq", "f")
.setParameter("oq", "")
.build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());
URIBuilder builder = new URIBuilder() .setScheme("http") .setHost("www.google.com") .setParameters(qparams);
@stianが言ったように
著者として、私はおそらく私のURL / URIビルダーが優れているかどうかを判断するのに最適な人ではありませんが、それでも以下のとおりです:https : //github.com/mikaelhg/urlbuilder
私は、JDKの外部に依存関係がなく、可能な限り単純な完全なソリューションを求めていたので、自分でロールする必要がありました。
HTTPClientの使用はうまくいきました。
protected static String createUrl(List<NameValuePair> pairs) throws URIException{
HttpMethod method = new GetMethod("http://example.org");
method.setQueryString(pairs.toArray(new NameValuePair[]{}));
return method.getURI().getEscapedURI();
}
URIの作成に役立つライブラリはたくさんあります(ホイールを再発明しないでください)。ここにあなたを始めるための3つがあります:
import javax.ws.rs.core.UriBuilder;
...
return UriBuilder.fromUri(url).queryParam(key, value).build();
import org.apache.http.client.utils.URIBuilder;
...
return new URIBuilder(url).addParameter(key, value).build();
import org.springframework.web.util.UriComponentsBuilder;
...
return UriComponentsBuilder.fromUriString(url).queryParam(key, value).build().toUri();
UriBuilder
(docs.spring.io/spring-framework/docs/current/javadoc-api/org/…)と UriBuilderFactory
(docs.spring.io/spring-framework/docs/current/javadoc-api/orgを確認してください。/…)
それはだ2020と名付けられ、非常に人気のライブラリがありOkHttp主演してきた35K GitHubの上で時間が。このライブラリを使用すると、以下のようなURLを構築できます。
import okhttp3.HttpUrl;
URL url = new HttpUrl.Builder()
.scheme("http")
.host("example.com")
.port(4567)
.addPathSegment("foldername/1234")
.addQueryParameter("abc", "xyz")
.build().url();
addPathSegment
(ではありませんaddPathSegments
)です。
URLクラスを提案したとして非難された後。私はコメンターのアドバイスを受けて、代わりにURIクラスを提案します。クラスは一度作成すると非常に不変であるため、URIのコンストラクターをよく見ることをお勧めします。
このコンストラクターを使用すると、URIに必要なすべてのものを設定できると思います。
URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)
Constructs a hierarchical URI from the given components.