2016-09-14 23 views
8

http://IP:4567/foldername/1234?abc=xyz oluşturmaya çalışıyor. Bu konuda pek bilgim yok ama google arama kod aşağıda yazdım:Java'da URL Oluştur

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(); 
     } 
    } 
} 

ben URL'yi http://IP:port/foldername/1234? kurabilirim. Sorgu bölümünde sıkıştım. Lütfen ilerlemem için bana yardım edin.

+0

Tekrarlama olabilir: //stackoverflow.com/questions/3753869/how-do-i-concatenate-two-strings-in-java) – px06

+0

@ px06 URL'lerin kaçış ve geçerliliğe ihtiyacı var, concat, 'abc = xyz' içeriyorsa kesmeyecektir. başka bir '=,? veya & '' kırılmış olacak. Bunun için özel bir lib kullanın, ancak son derece basit durumlar için concat çalışabilir. –

cevap

3

, URL ile güvenli bir şekilde inşa edebilirsiniz özel bir URI türüdür. URI'yi daha güvenilir bir şekilde oluşturmak için URI sınıfını (Java 1.0'dan beri olan saygıdeğer URL sınıfından daha modern) kullanabilirsiniz ve bunu, URI:

yöntemiyle bir URL'ye dönüştürebilirsiniz.
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(); 

path bir eğik çizgi ile başlaması gerektiğini unutmayın.

+0

Teşekkür ederim. Benim için iyi çalıştı . –

+1

Bu kodda "&" ile kullanıcı parçasına sahip olsam nasıl kullanabilirim? ör. "http: // IP: 4567/foldername/1234? abc = xyz & def = stu" –

+0

Bu bir parça değildir. Bu sadece çoklu sorgu parametreleri. Ne yazık ki, URI'nin bunları birleştirmek kolay değildir; sorgu dizesini kendiniz oluşturmanız gerekir. Sorgu parametresi değerlerinin genellikle [kodlanmış] olması gerektiğini unutmayın (http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html#encode-java.lang.String-java.lang .String-). – VGR

20

Sadece çiğ Spec

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

geçebilir Yoksa org.apache.http.client.utils.URIBuilder gibi bir şeyi alıp uygun url kodlama genel olmayan Java açısından

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

Teşekkürler, iyi çalışıyor. –

+0

Zaten Apache http istemci lib, gerçekten yararlı ve basit sayesinde bu lib bir bağımlılık vardı. –

+0

Bu kurucunun, kısmi url oluşturma için de kullanılabileceğini unutmayın, örneğin sadece parametreler için: 'builder.addParameter (...); ... builder.toString() 'diğer parçaları eksik olsa bile sadece bu kısmı geri dönecektir. –

10

Kullanım OkHttp GitHub'dan 20K kez yıldız eklendi OkHttp adında çok popüler bir kütüphane mevcuttur

.

import okhttp3.HttpUrl; 

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

Veya sadece bir URL ayrıştırabilir: Bu kütüphane ile, aşağıdaki gibi url inşa edebilirsiniz

URL url = HttpUrl.parse("http://example.com:4567/foldername/1234?abc=xyz").url(); 
(http [Java iki dizeyi bitiştirmek nasıl?] Arasında
İlgili konular