2010-05-27 14 views
7

Próbuję użyć DefaultHttpClient i HttpGet, aby wysłać żądanie do usługi internetowej. Niestety adres URL usługi internetowej zawiera niedozwolone znaki, takie jak {(ex: domain.com/service/{username}). Jest oczywiste, że nazewnictwo usług sieciowych nie jest dobrze napisane, ale nie mogę tego zmienić.Użyj HttpGet z niedozwolonymi znakami w adresie URL

Kiedy robię HttpGet(url), otrzymuję informację, że mam niedozwolony znak w adresie URL (to znaczy {i}). Jeśli zakoduję URL przed tym, nie ma błędu, ale żądanie przechodzi do innego adresu URL, gdzie nie ma nic.

Adres URL, chociaż ma niedozwolone znaki, działa z poziomu przeglądarki, ale implementacja HttpGet nie pozwala mi jej używać. Co powinienem zrobić lub użyć, aby uniknąć tego problemu?

+0

Czy próbowałeś używać% 7B i% 7D, jak: domain.com/service/%7Busername%7D. Czy to właśnie masz na myśli przez kodowanie? – sblundy

Odpowiedz

9

http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html

Konkretnie:

String safeUrl = URLEncoder.encode("domain.com/service/{username}", "UTF-8"); 
+0

Hmm. Jak już powiedziałem w pytaniu, próbowałem kodowania (dokładna linia jak twoja), ale to nie zadziałało. Próbowałem teraz i sukces! Dzięki. –

+0

Po raz pierwszy wypróbowałem i nie udało się, ponieważ upłynął limit czasu połączenia. –

1

To pytanie jest stary, ale bardzo mi pomógł, a ja po prostu chciałem, aby dodać do każdego, kto może przyjść, że naprawiłem ten problem w mojej aplikacji w odmianie Odpowiedź Mike'a.

String safeUrl = "domain.com/service/" + URLEncoder.encode("{username}", "UTF-8"); 

znalazłem to kodowanie tylko odpowiednie części pracował, gdzie próbuje zakodować cały URL spowodował błąd dla mnie.

1

Nie powinniśmy używać URLEncoder.encode dla adresu adresu URL, ponieważ błędnie zmienia on http://domain.com/ {username} na http% 3A% 2F% 2Fdomena.com% 2 {username} i powinieneś wiedzieć, że zastąpi wszystkie spacje z "+", że lepiej dla mnie zastąpić je "% 20".

Ta funkcja koduje tylko ostatnią część adresu URL, która jest {nazwa użytkownika} lub nazwa pliku lub coś, co może mieć niedozwolone znaki.

String safeUrl(String inUrl) 
{ 
    int fileInd = inUrl.lastIndexOf('/') + 1; 
    String addr = inUrl.substring(0, fileInd); 
    String fileName = inUrl.substring(fileInd); 
    String outUrl=null; 

    try { 
     outUrl = addr + URLEncoder.encode(fileName, "UTF-8"); 
     outUrl = outUrl.replace("+", "%20"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return outUrl; 
} 
Powiązane problemy