2010-05-27 4 views
7

Ich versuche DefaultHttpClient und HttpGet zu verwenden, um eine Anfrage an einen Webdienst zu stellen. Leider enthält die Webdienst-URL unzulässige Zeichen wie {(z. B. domain.com/service/{username}). Es ist offensichtlich, dass die Benennung des Web Services nicht gut geschrieben ist, aber ich kann sie nicht ändern.Verwenden Sie HttpGet mit ungültigen Zeichen in der URL

Wenn ich HttpGet(url) mache, bekomme ich, dass ich ein ungültiges Zeichen in der URL habe (das ist {und}). Wenn ich die URL vorher codiere, gibt es keinen Fehler, aber die Anfrage geht an eine andere URL wo nichts ist.

Die URL, obwohl ungültige Zeichen, funktioniert über den Browser, aber die HttpGet Implementierung lässt mich nicht verwenden. Was sollte ich stattdessen tun oder verwenden, um dieses Problem zu vermeiden?

+0

Haben Sie versucht mit% 7B und% 7D, wie folgt: domain.com/service/%7Busername%7D. Oder meinst du das mit Codierung? – sblundy

Antwort

9

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

Im Einzelnen:

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

Hmm. Wie ich in der Frage gesagt habe, habe ich versucht, zu kodieren (genaue Zeile wie Ihre), aber es hat nicht funktioniert. Ich habe es jetzt versucht und Erfolg! Vielen Dank. –

+0

Das erste Mal, dass ich es versuchte und fehlgeschlagen war, weil das Verbindungszeitlimit abgelaufen war. –

1

Diese Frage ist alt, aber es hat mir geholfen, und ich wollte nur für alle hinzufügen, die vorbeikommen könnte, dass ich dieses Problem mit einer Variation auf meine app befestigt ist Mikes Antwort.

Ich fand, dass die Codierung nur die relevanten Teile funktionierte, wo der Versuch, die gesamte URL zu codieren, einen Fehler für mich verursachte.

1

Wir sollten URLEncoder.encode nicht als Adressenteil der URL verwenden, da er fälschlicherweise Ihre http://domain.com/ {Benutzername} in http% 3A% 2F% 2Fdomain.com% 2 {Benutzername} ändert und Sie sollten wissen, dass alle Leerzeichen ersetzt werden mit '+' war es für mich besser, sie durch "% 20" zu ersetzen.

Hier verschlüsselt diese Funktion nur den letzten Teil Ihrer URL, der {Benutzername} oder der Dateiname oder irgendetwas, das ungültige Zeichen haben kann.

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