Используйте HttpGet с недопустимыми символами в URL - PullRequest
8 голосов
/ 27 мая 2010

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

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

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

Ответы [ 3 ]

10 голосов
/ 27 мая 2010

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

В частности:

String safeUrl = URLEncoder.encode("domain.com/service/{username}", "UTF-8");
1 голос
/ 06 ноября 2015

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

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

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;
}
1 голос
/ 28 марта 2013

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

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

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

...