2014-10-29 43 views
23

Tôi đang xây dựng một String với StringBuilderLàm thế nào để xây dựng url trong java?

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

Sau đó, tôi xây dựng một Url

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

Và sau đó tôi cố gắng kết nối

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

Nhưng url dường như không phải là ngay từ kết quả tôi nhận được. Nó giống như một số tham số được thông qua sai. Đó là lý do tại sao tôi nghĩ rằng vấn đề là một phần của StringBuilder.

Vấn đề nằm trong tham số kép tôi cố gắng chuyển.

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

Và sau đó tôi đặt nó vào url. Nhưng nếu tôi cho nó như một chuỗi kết quả là chính xác.

String lng = "23.433114" 

UrlEncoding có cần thiết không? Tôi sẽ cố gắng những gì được đề xuất dưới đây.

+0

Bạn nên sử dụng thư viện có mẫu URI (xem [ở đây] (https://github.com/fge/uri-template) ví dụ) – fge

+1

@RealSkeptic 'URLEncoder.encode()' mã hóa cho ứng dụng/x-www-form-urlencoded', khác với mã hóa tham số truy vấn/phân đoạn URI/etc – fge

+1

@fge Không, URLencode là lược đồ mã hóa chuẩn. Nó được sử dụng cho cả hai tham số trong các truy vấn GET và cho các tham số trong các truy vấn POST là application/x-www-form-urlencoded. Xem [Wikipedia] (http://en.wikipedia.org/wiki/Percent-encoding). – RealSkeptic

Trả lời

50

Hãy thử URIBuilder apache: [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 phụ thuộc:

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

Hoạt động hoàn hảo. Vấn đề duy nhất là nó ném các ngoại lệ được kiểm tra mà nhàm chán để xử lý. –

+0

Chúng nhàm chán khi bị bắt như bất kỳ ngoại lệ nào khác .. không? :) –

4

Vì bạn muốn tạo URL và tiêu thụ nó qua một yêu cầu GET, nó sẽ là tốt hơn để sử dụng một thư viện giúp bạn trong quá trình này. Bạn có thể sử dụng HttpComponents hoặc một thư viện khác như Unirest được xây dựng trên đầu trang của HttpComponents giúp dễ dàng tất cả công việc này.

Dưới đây là một ví dụ sử dụng Unirest:

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

này sẽ lấy lại phản ứng HTML tương ứng với tất cả các kết quả từ một tìm kiếm trên youtube sử dụng "eñe". Ký tự ñ sẽ được mã hóa cho bạn.

TỪ BỎ: Tôi không được gắn với Unirest theo bất kỳ cách nào. Tôi không phải là nhà phát triển hoặc nhà tài trợ của dự án này. Tôi chỉ là người dùng hạnh phúc của khung công tác này.

+0

Hey, qute của nó trễ nhưng chúng ta có thể vượt qua giá trị .field ("search_query", "eñe") trong nhận được yêu cầu ?? –

Các vấn đề liên quan