Для отправки запросов на сервер пользовался 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
Комментариев нет:
Отправить комментарий