2010-05-27 7 views
7

Я пытаюсь использовать DefaultHttpClient и HttpGet, чтобы сделать запрос к веб-сервису. К сожалению, URL веб-службы содержит незаконные символы, такие как {(ex: domain.com/service/{username}). Очевидно, что присвоение веб-сервисов плохо написано, но я не могу его изменить.Используйте HttpGet с незаконными символами в URL-адресе

Когда я делаю HttpGet(url), я понимаю, что у меня есть незаконный символ в URL-адресе (то есть {и}). Если я кодирую URL-адрес до этого, нет ошибки, но запрос переходит к другому URL-адресу, где нет ничего.

URL-адрес, хотя и имеет незаконные символы, работает в браузере, но реализация HttpGet не позволяет мне использовать его. Что мне делать или использовать вместо этого, чтобы избежать этой проблемы?

+0

Вы пробовали использовать% 7B и% 7D, например: domain.com/service/%7Busername%7D. Или это то, что вы подразумеваете под кодировкой. – sblundy

ответ

9

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

В частности:

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

Хм. Как я уже сказал в вопросе, я пробовал кодирование (точную строку как ваш), но это не сработало. Я повторил теперь и успех! Благодарю. –

+0

В первый раз, когда я попробовал его и не смог, так это потому, что истекло время ожидания соединения. –

1

Этот вопрос старый, но он помог мне, и я просто хотел бы добавить для тех, кто может прийти, что я установил этот вопрос в моем приложении с изменением Ответ Майка.

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

Я обнаружил, что кодирование только соответствующие части работали, где пытается зашифровать весь URL возникла ошибка для меня.

1

Мы не должны использовать URLEncoder.encode для адресной части URL-адреса, потому что он неверно изменяет ваше http://domain.com/ {имя_пользователя} на http% 3A% 2F% 2Fdomain.com% 2 {имя_пользователя}, и вы должны знать, что он заменит все пробелы с «+», что мне лучше заменить их «% 20».

Здесь эта функция кодирует только последнюю часть вашего URL, которая является {именем пользователя} или именем файла или чем-либо, что может иметь незаконные символы.

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