如何在Java中构建URL或URI?是否有惯用的方式,或者很容易做到这一点的库?
我需要允许从请求字符串开始,解析/更改各种URL部分(方案,主机,路径,查询字符串)并支持添加和自动编码查询参数.
Chi*_*kei 75
从Apache HTTP Component 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=
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:从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());
Run Code Online (Sandbox Code Playgroud)
Mik*_*eck 61
作为作者,我可能不是判断我的URL/URI构建器是否良好的最佳人选,但它仍然是:https://github.com/mikaelhg/urlbuilder
我想要最简单的完整解决方案,在JDK之外没有依赖关系,所以我不得不自己动手.
jon*_*077 29
使用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();
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*aly 10
有很多库可以帮助您构建URI(不要重新发明轮子).这里有三个让你入门:
import javax.ws.rs.core.UriBuilder;
...
return UriBuilder.fromUri(url).queryParam(key, value).build();
Run Code Online (Sandbox Code Playgroud)
import org.apache.http.client.utils.URIBuilder;
...
return new URIBuilder(url).addParameter(key, value).build();
Run Code Online (Sandbox Code Playgroud)
import org.springframework.web.util.UriComponentsBuilder;
...
return UriComponentsBuilder.fromUriString(url).queryParam(key, value).build().toUri();
Run Code Online (Sandbox Code Playgroud)
另请参见: GIST> URI Builder测试
它是2018年,有一个非常受欢迎的名为OkHttp的图书馆,已经在GitHub上出演了27K次.使用此库,您可以构建如下所示的URL:
import okhttp3.HttpUrl;
URL url = new HttpUrl.Builder()
.scheme("http")
.host("example.com")
.port(4567)
.addPathSegment("foldername/1234")
.addQueryParameter("abc", "xyz")
.build().url();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71921 次 |
| 最近记录: |