Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > IllegalArgumentException в HttpPost запросе


Автор: Metalex 10.8.2012, 12:36
Всем привет!
У меня есть апи, пример из которого выглядит примерно так:
Код

http://site/searches.json -d"search[params_attributes[origin_name]=MOW"\ -d"search[params_attributes][destination_name]=IEV"\ -d"search[params_attributes[some]=SOME"

Но при попытке создать пост-запрос вылетает:
Код

Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 43:  http://somesite/searches.json -d"search[params_attributes][origin_name]=KBP"...
at java.net.URI.create(URI.java:776)
at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)

Т.е. ошибка на пробеле.

Что не так? smile 

Автор: LSD 10.8.2012, 12:45
Пробелы в URL-ах недопустимы. Если нужен пробел то его надо заменить на escape последовательность '+' или '%20'.
Но в данном случае, с вероятностью 99%, ошибка в URL, скорее всего вместо пробела должен быть '?'.

Автор: Metalex 10.8.2012, 12:47
Пробовал заменять %20 - не помогло. Сейчас попробую на "?" заменить.

Добавлено через 5 минут и 42 секунды
Хм, похоже теперь на двойные кавычки ругается

Автор: LSD 10.8.2012, 13:53
1. Все параметры надо прогонять через java.net.URLEncoder.encode()
2. Параметры в GET запросе разделяются & а не пробелами.

Автор: Metalex 10.8.2012, 14:27
LSD, это POST запрос..

Ок, что получается.

Какая ошибка теперь:
Код

Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters.
at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:572)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

Раньше вываливалось на:
Код

HttpPost request = new HttpPost(mURI);

Сейчас тут проходит все ок, теперь на следующей строке:
Код

HttpResponse response = mHttpClient.execute(request);


Огромнейшее спасибо за внимание, нашел ответ http://stackoverflow.com/questions/4989743/android-httpclient-and-utf-8

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)