2014-10-29 5 views
23
나는 모두 StringBuilder과 String를 구축하고

자바에서 URL을 만드는 방법은 무엇입니까?

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

그럼 내가 연결

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

을 시도하지만 URL이 오른쪽에서 일하지 않는 것 같다

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

그리고 URL을 구축 결과가 나옵니다. 그것은 몇몇 매개 변수가 거짓 전달되고있는 것과 같습니다. 그게 문제가 StringBuilder의 일부라고 생각하는 이유입니다.

문제는 두 번 전달하려고합니다.

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

그리고 나서 URL에 넣습니다. 하지만 문자열로 제공하면 결과가 정확합니다.

String lng = "23.433114" 

UrlEncoding이 필요합니까? 나는 아래에 제시된 것을 시도 할 것이다. [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(); 

메이븐 의존성 :

+0

URI 템플릿을 사용하는 라이브러리를 사용해야합니다 (예 : [here] (https://github.com/fge/uri-template) 참조). – fge

+1

@RealSkeptic URLEncoder.encode() x-www-form-urlencoded'입니다. 이는 쿼리 매개 변수/URI 조각/인코딩과는 완전히 다릅니다. – fge

+1

@fge 아니요, URLencode는 표준 인코딩 체계입니다. 이것은 GET 쿼리의 매개 변수와 POST 쿼리의 application/x-www-form-urlencoded 매개 변수에 모두 사용됩니다. [Wikipedia] (http://en.wikipedia.org/wiki/Percent-encoding)를 참조하십시오. – RealSkeptic

답변

50

아파치의 URIBuilder보십시오 당신이 URL을 만들려면 및 GET 요청을 통해 그것을 소비하기 때문에

<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.5.1</version> 
</dependency> 
+6

완벽하게 작동합니다. 유일한 문제는 처리하기가 지루한 점검 된 예외를 throw한다는 것입니다. –

+0

그들은 다른 어떤 예외처럼 붙잡히는 지루하다. .. 아니. :) –

4

를,을 사용하는 것이 좋을 것이다 이 과정에서 당신을 돕는 도서관. HttpComponents 또는이 모든 작업을 쉽게 수행 할 수있는 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 응답을 검색합니다 :

여기 Unirest를 사용하는 예제입니다. ñ 문자가 인코딩됩니다.

면책 조항 : 어떤 의미로든 Unirest에는 첨부되지 않습니다. 나는이 프로젝트의 개발자 또는 후원자가 아니다. 나는이 프레임 워크의 행복한 사용자 일뿐입니다.

+0

안녕하세요, 그 질문은 늦었지만 값을 전달할 수 있습니다. field ("search_query", "eñe") 요청을 받습니까 ?? –

관련 문제