2010-05-27 4 views
7

Sto tentando di utilizzare DefaultHttpClient e HttpGet per effettuare una richiesta a un servizio Web. Sfortunatamente l'URL del servizio web contiene caratteri illegali come {(ex: dominio.com/service/{username}). È ovvio che la denominazione del servizio Web non è ben scritta, ma non posso cambiarla.Utilizzare HttpGet con caratteri non validi nell'URL

Quando faccio HttpGet(url), ottengo che ho un carattere illegale nell'URL (cioè {e}). Se codifico l'URL prima, non c'è errore, ma la richiesta va a un URL diverso dove non c'è nulla.

L'URL, sebbene abbia caratteri non validi, funziona dal browser ma l'implementazione HttpGet non consente di utilizzarlo. Cosa dovrei fare o usare invece per evitare questo problema?

+0

Hai provato a utilizzare% 7B e% 7D, in questo modo: domain.com/service/%7Busername%7D. O è questo che intendi per codifica. – sblundy

risposta

9

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

In particolare:

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

Hmm. Come ho detto nella domanda, ho provato la codifica (linea esatta come la tua) ma non ha funzionato. Ho ripreso ora e il successo! Grazie. –

+0

La prima volta che l'ho provato e ho fallito è perché il timeout della connessione è scaduto. –

1

Questa domanda è vecchio ma mi ha aiutato e volevo solo aggiungere per chi potrebbe venire da che ho fissato questo problema sul mio app con una variazione di La risposta di Mike

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

ho scoperto che la codifica solo le parti interessate hanno lavorato, in cui il tentativo di codificare l'intero URL causato un errore per me.

1

non dovremmo utilizzare URLEncoder.encode per l'indirizzo parte dell'URL perché esso modifica erroneamente il tuo http://domain.com/ {username} a http% 3A% 2F% 2Fdomain.com% 2 {username} e dovresti sapere che sostituirà tutti gli spazi con '+' è stato meglio per me sostituirli con "% 20".

Qui questa funzione codifica solo l'ultima parte dell'URL che è {nome utente} o nome file o qualsiasi cosa che potrebbe contenere caratteri non validi.

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