2016-09-14 17 views
8

Próbujesz zbudować http://IP:4567/foldername/1234?abc=xyz. Nie wiem zbyt wiele o tym, ale ja napisałem poniżej kod z wyszukiwarką Google:Buduj adres URL w 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(); 
     } 
    } 
} 

jestem w stanie zbudować URL http://IP:port/foldername/1234?. Utknąłem w części zapytania. Proszę, pomóżcie mi iść dalej.

+0

Możliwy duplikat [Jak złączyć dwa ciągi w Java?] (Http: //stackoverflow.com/questions/3753869/how-do-i-concatenate-two-strings-in-java) – px06

+0

@ url06 urls potrzebują ucieczki i sprawdzania poprawności, concat nie zamierza go ciąć, ponieważ jeśli 'abc = xyz' zawiera niektóre inne '=,? lub & "to będzie zepsute. Skorzystaj z dedykowanej biblioteki dla tego, dla bardzo prostych przypadków może jednak działać concat. –

Odpowiedz

3

W ogólnych warunkach innych niż Java, adres URL jest wyspecjalizowanym typem URI. Możesz użyć klasy URI (która jest nowocześniejsza niż czcigodna klasa adresów URL, która istnieje od wersji 1.0), aby utworzyć bardziej wiarygodny identyfikator URI, i możesz przekonwertować go na adres URL przy użyciu metody 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(); 

Należy pamiętać, że path należy rozpocząć od ukośnika.

+0

Dziękuję. Dla mnie zadziałało. –

+1

Jeśli muszę fragment użytkownika w tym kodzie z "&" jak mogę go użyć? np. "http: // IP: 4567/nazwa_folderu/1234? abc = xyz & def = stu" –

+0

To nie jest fragment. To tylko kilka parametrów zapytania. Niestety, URI obecnie nie ma łatwych do złożenia; będziesz musiał sam zbudować ciąg zapytania. Zauważ, że wartości parametrów zapytania zwykle muszą być [zakodowane] (http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html#encode-java.lang.String-java.lang .Strunowy-). – VGR

20

można po prostu przejść surowy Spec

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

Albo można zrobić coś takiego org.apache.http.client.utils.URIBuilder i budować ją w bezpieczny sposób z właściwego kodowania url

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

Dzięki temu działa dobrze. –

+0

Już ta lib była zależna dzięki bibliotece klienta HTTP Apache, bardzo pomocna i prosta. –

+0

Należy zauważyć, że ten program budujący może być również używany do częściowego budowania adresów URL, na przykład tylko dla parametrów: '... builder.addParameter (...); ... builder.toString() 'zwróci tylko tę część, nawet jeśli brakuje innych części. –

10

Zastosowanie OkHttp

Jest bardzo popularna biblioteka o nazwie OkHttp który został oznaczony gwiazdką 20K razy na GitHub. Z tej biblioteki, można zbudować url jak poniżej:

import okhttp3.HttpUrl; 

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

Albo może po prostu analizować URL:

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