2016-09-14 40 views
8

Đang cố gắng xây dựng http://IP:4567/foldername/1234?abc=xyz. Tôi không biết nhiều về nó nhưng tôi đã viết mã bên dưới để tìm kiếm từ google:Tạo URL trong java

import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URL; 

public class MyUrlConstruct { 

    public static void main(String a[]){ 

     try { 
      String protocol = "http"; 
      String host = "IP"; 
      int port = 4567; 
      String path = "foldername/1234"; 
      URL url = new URL (protocol, host, port, path); 
      System.out.println(url.toString()+"?"); 
     } catch (MalformedURLException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

Tôi có thể tạo URL http://IP:port/foldername/1234?. Tôi bị kẹt ở phần truy vấn. Xin hãy giúp tôi tiến lên phía trước.

+0

có thể trùng lặp của [Làm thế nào để nối hai chuỗi trong Java?] (Http: //stackoverflow.com/questions/3753869/how-do-i-concatenate-two-strings-in-java) – px06

+0

@ px06 url cần thoát và xác thực, concat sẽ không cắt nó vì nếu 'abc = xyz' chứa một số khác '=,? hoặc & 'nó sẽ bị hỏng. Sử dụng một lib dành riêng cho điều này, cho trường hợp cực kỳ đơn giản concat có thể làm việc mặc dù. –

Trả lời

3

Về phi Java Nói chung, một URL là một loại URI chuyên biệt. Bạn có thể sử dụng lớp URI (lớp này hiện đại hơn lớp URL đáng kính, đã có từ Java 1.0) để tạo URI đáng tin cậy hơn và bạn có thể chuyển đổi nó thành URL với phương thức toURL của URI:

String protocol = "http"; 
String host = "example.com"; 
int port = 4567; 
String path = "/foldername/1234"; 
String auth = null; 
String fragment = null; 
URI uri = new URI(protocol, auth, host, port, path, query, fragment); 
URL url = uri.toURL(); 

Lưu ý rằng path cần phải bắt đầu bằng dấu gạch chéo.

+0

Cảm ơn bạn. Nó làm việc tốt cho tôi . –

+1

Nếu tôi có phân đoạn người dùng trong mã này bằng "&" cách tôi có thể sử dụng nó? ví dụ: "http: // IP: 4567/tên người dùng/1234? abc = xyz & def = stu" –

+0

Đó không phải là một đoạn. Đó chỉ là nhiều tham số truy vấn. Thật không may, URI hiện không có dễ dàng để lắp ráp chúng; bạn sẽ phải tự xây dựng chuỗi truy vấn. Lưu ý rằng giá trị tham số truy vấn thường cần phải được [mã hóa] (http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html#encode-java.lang.String-java.lang .Chuỗi-). – VGR

20

Bạn chỉ có thể vượt qua liệu đặc tả

new URL("http://IP:4567/foldername/1234?abc=xyz"); 

Hoặc bạn có thể mất một cái gì đó giống như org.apache.http.client.utils.URIBuilder và xây dựng nó theo cách an toàn với mã hóa url thích

URIBuilder builder = new URIBuilder() 
builder.setScheme("http") 
builder.setHost("IP") 
builder.setPath("/foldername/1234") 
builder.addParameter("abc", "xyz") 
URL url = builder.build().toURL() 
+0

Cảm ơn nó đang hoạt động tốt. –

+0

Đã có lib này như là một phụ thuộc nhờ vào Apache http khách hàng lib, thực sự hữu ích và đơn giản. –

+0

Lưu ý rằng trình tạo này cũng có thể được sử dụng để xây dựng một phần url, ví dụ chỉ cho các tham số: '... builder.addParameter (...); ... builder.toString() 'sẽ trả về phần này ngay cả khi các phần khác bị thiếu. –

10

Sử dụng OkHttp

Có một thư viện rất nổi tiếng có tên OkHttp đã được đóng vai chính 20K lần trên GitHub. Với thư viện này, bạn có thể xây dựng các url như dưới đây:

import okhttp3.HttpUrl; 

URL url = new HttpUrl.Builder() 
    .scheme("http") 
    .host("example.com") 
    .port(4567) 
    .addPathSegments("foldername/1234") 
    .addQueryParameter("abc", "xyz") 
    .build().url(); 

Hoặc bạn chỉ có thể phân tích cú pháp URL:

URL url = HttpUrl.parse("http://example.com:4567/foldername/1234?abc=xyz").url();