Я отправляю параметры POST в своем приложении для Android, однако ни один из них не получен сервером (request().body().asFormUrlEncoded()
в Play Framework возвращает пустую карту). Вот код AsyncTask, используемый для отправки запроса:HttpURLConnection не отправляет данные POST (Android)
private static AsyncTask<String, Void, String> register = new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
String email = params[0], username = params[1], password = params[2];
try {
URL url = new URL(REGISTER);
HttpURLConnection conn;
conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
String urlParams = URLEncoder.encode("username=" + username + "&email=" + email + "&password=" + password, "UTF-8");
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(urlParams.length()));
conn.connect();
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(urlParams);
writer.flush();
writer.close();
int resp = conn.getResponseCode();
Object content = conn.getContent();
conn.disconnect();
if(resp != 200)
return ERROR + "Bad response: " + resp + ", ";// + conn.getContent();
return content.toString();
} catch (IOException e) {
System.out.println("IOException occurred: ");
e.printStackTrace();
return ERROR + e.getMessage();
}
}
};
я планирую сделать что-то покрасивее, но мне нужно, чтобы сделать эту работу первым. Каждый ответ до сих пор предлагал что-то, что я уже сделал (например, connect()
, установив Content-Length
, закрыв Writer после завершения, получив ответ), и он все еще не работает. Соединение принимается сервером, но тело пуст и сервер возвращает 400
.
Возможно, вам придется кодировать отдельные значения параметров (и ключи параметров). –
Вы уверены, что вам нужно кодировать параметры POST? Обычно это требуется только для параметров GET. –
Не кодирующие параметры решили это, но теперь я еще более озадачен, почему это так? С другой стороны, если я не кодирую params, я не могу разрешить '&' (и другие символы со специальным значением) в любом из полей или мне нужно их закодировать вручную. – Luke