Java에서 URL 또는 URI를 작성하는 관용적 방법은 무엇입니까?
Java에서 URL 또는 URI를 작성하는 방법 관용적 인 방법이나 쉽게 할 수있는 라이브러리가 있습니까?
요청 문자열에서 시작하고 다양한 URL 부분 (구성표, 호스트, 경로, 쿼리 문자열)을 구문 분석 / 변경하고 쿼리 매개 변수 추가 및 자동 인코딩을 지원해야합니다.
공식 튜토리얼 의 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=
}
}
편집 : 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());
필자로서 필자는 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 가지 방법은 다음과 같습니다.
자바 EE 7
import javax.ws.rs.core.UriBuilder;
...
return UriBuilder.fromUri(url).queryParam(key, value).build();
org.apache.httpcomponents : httpclient : 4.5.2
import org.apache.http.client.utils.URIBuilder;
...
return new URIBuilder(url).addParameter(key, value).build();
org.springframework : spring-web : 4.2.5. 릴리스
import org.springframework.web.util.UriComponentsBuilder;
...
return UriComponentsBuilder.fromUriString(url).queryParam(key, value).build().toUri();
참조 : GIST> URI 빌더 테스트
OkHttp 사용
그것은의 2019 와라는 이름의 매우 인기있는 라이브러리가 OkHttp 출연하고있다 32K 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();
After being lambasted for suggesting the URL class. I will take the commenter's advice and suggest the URI class instead. I suggest you look closely at the constructors for a URI as the class is very immutable once created.
I think this constructor allows you to set everything in the URI that you could need.
URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)
Constructs a hierarchical URI from the given components.
참고URL : https://stackoverflow.com/questions/883136/what-is-the-idiomatic-way-to-compose-a-url-or-uri-in-java
'program tip' 카테고리의 다른 글
AngularJs에서 ng-repeat로 필터링 (키, 값)하는 방법은 무엇입니까? (0) | 2020.07.30 |
---|---|
Powershell v3 Invoke-WebRequest HTTPS 오류 (0) | 2020.07.30 |
Vim에서 삭제 (잘라 내지 않는) 방법? (0) | 2020.07.30 |
Xcode 9의 "이 함수 선언은 프로토 타입이 아닙니다"경고 (0) | 2020.07.30 |
Java의 제네릭 구현이 잘못되었다고 주장하는 이유는 무엇입니까? (0) | 2020.07.30 |