Страницы

Поиск по вопросам

вторник, 25 декабря 2018 г.

При отправке POST запроса при помощи httpurlconnection %20 заменяются на пробелы

Для отправки запросов на сервер пользовался httpurlconnection. На определённый адрес отправлял пост запросы примерно такого вида act=GETCOMMENTS&connectid=... и т.д. И всё вполне работало, приходил ответ от сервера и я его парсил. Но проблема возникла, когда мне посредством этого запроса надо было отправить некий текст. А именно отправка комментария, где в одном из ключей запроса пишется сам комментарий. Примерно так: &commenttext=test%20test2. На сервер должно было это прийти именно в таком виде, а сервер сам производит замену %20 на пробел. Но на сервер приходит именно test test2 с настоящим пробелом, а не %20, а там настоящие пробелы обрезаются. Вот код метода, который осуществляет все запросы:
private String serverRequester2 (String reqParam){ try { URL url = new URL("http:/...определённыйСайт.../test.php"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("USER-AGENT", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Accept-Charset", "UTF-8"); connection.setDoOutput(true); DataOutputStream dStream = new DataOutputStream(connection.getOutputStream()); dStream.writeBytes(reqParam); Log.d("REQ_PARAM",reqParam); dStream.flush(); dStream.close();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = ""; StringBuilder responseOutput = new StringBuilder();
while ((line=br.readLine())!=null){ Log.d("LINE",line); responseOutput.append(line); } br.close();
return responseOutput.toString(); } catch (MalformedURLException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } }
А вот так я его вызываю и передаю ему параметры, которые надо отправить на сервер:
return serverRequester2("act=CREATECOMMENT&connectid="+connectid+"&token="+token+"&clientcode=123123123&postid="+postID+"&commenttext=test%20test2");
Что я делаю не так? Почему отправляется настоящий пробел, вместо %20? Кстати знак + он тоже заменяет на пробел. А мне нужно, чтобы серверу пришло именно test%20test2 или test+test2, а не test test2.
P.S. сначала была мысль, что всё дело в сервере, но нет, с другого приложения написанного другим человеком на Phonegap запрос приходит именно с URL кодировкой, а не с настоящим пробелом.


Ответ

Для отправки текста test%20test2 нужно передать test%2520test2, а для test+test2 нужно test%2btest2
Детальнее:
https://en.wikipedia.org/wiki/Percent-encoding http://urlencode.org/ https://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html

Комментариев нет:

Отправить комментарий