У меня возникли проблемы с отправкой запроса POST на веб-сервер из приложения для Android. Я создал страницу, которая принимает параметр POST «данные» со строковым значением, и я проверил, что он работает с расширением Google Chrome Postman. Однако, когда я пытаюсь отправить данные из приложения Android, я всегда получаю неверный код ответа HTTP, как если бы данные вообще не передавались на сервер.Android POST на сервер всегда возвращает код ложного ответа
private void sendDataToServer(final String uri, final String data) {
Log.d("Debug", "MainActivity -> sendDataToServer (start)");
Thread t = new Thread() {
public void run() {
try {
// Set up connection
Log.d("Debug", uri);
HttpURLConnection urlConnection = (HttpURLConnection) ((new URL(uri).openConnection()));
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.connect();
// Write
OutputStreamWriter writer = new OutputStreamWriter(urlConnection.getOutputStream());
Log.d("Debug", data);
writer.write("data=" + data);
writer.close();
// Read
int responseCode = urlConnection.getResponseCode();
Log.d("Debug", String.valueOf(responseCode));
if (responseCode == 200) {
Log.d("Debug", "Message sending: Success!");
// TODO: Do something with the results
} else {
Log.d("Debug", "Message sending: Failure...");
}
urlConnection.disconnect();
} catch (UnsupportedEncodingException e) {
Log.d("Debug", e.getMessage());
} catch (IOException e) {
Log.d("Debug", e.getMessage());
}
}
};
t.start();
Log.d("Debug", "MainActivity -> sendDataToServer (end)");
}
код веб-сервера:
$postData = $_POST['data'];//file_get_contents("php://input");
if ($postData) {
$connection = connectToDB();
$array = json_decode($postData);
foreach ($array as $element) {
addMessage($connection, $element->timestamp, $element->sender, $element->message);
}
disconnectFromDB($connection);
http_response_code(200);
} else {
http_response_code(400);
}
Что я могу сделать, чтобы исправить это поведение? Я запускаю Android Lollipop.
Что такое код ответа вы получите? –
@abdulrahmank Точный код ответа не имеет значения. В настоящее время я просто возвращаю код HTTP-ответа (отличный от 200) с сервера, если он не получает соответствующую строку в качестве переменной POST. Тем не менее, я проверил с расширением Postman, что строка формата, переданного в приложении, должна быть принята. – wolx