Данные JSON POST через HttpURLConnection - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь сделать запрос к моему RESTful API с помощью Android и HttpURLConnection.Данные должны быть отправлены в формате JSON через данные POST.

Вот мой код:

JSONObject check_request = new JSONObject();
check_request.put("username", username);

JSONObject request = BuildRequest(check_request, "username_check", false);
Log.i("DEBUG", request.toString());
// DEBUG OUTPUT: {"timestamp":1526900318,"request":{"username":"blubberfucken","type":"username_check"}}

URL request_url = new URL(apiURL);
HttpURLConnection connection = (HttpURLConnection)request_url.openConnection();
connection.setRequestProperty("User-Agent", "TheGameApp");
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-type", "application/json; charset=UTF-8");
connection.setDoOutput(true);
connection.setDoInput(true);

OutputStream os = connection.getOutputStream();
os.write(request.toString().getBytes("UTF-8"));
os.flush();


InputStream in = new BufferedInputStream(connection.getInputStream());

String result = "";

BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF8"));
String str;
while ((str = br.readLine()) != null)
{
    result += str;
}

Log.i("DEBUG", result);

//JSONObject result_json = new JSONObject(result);
os.close();
in.close();
connection.disconnect();

Вы можете увидеть выходные данные отладки в качестве комментария.Проблема в том, что API не получает никаких данных POST.Я использовал PHP var_dump для вывода $_POST и $_REQUEST, которые оба являются пустыми массивами.

Что мне здесь не хватает?

Поскольку возник вопрос, если API работает.Эта команда cURL отлично работает с правильным результатом (это те же данные JSON, что и напечатанный отладчик):

curl -d '{"timestamp":1526900318,"request":{"username":"blubberfucken","type":"username_check"}}' -H "Content-Type: application/json" -X POST http://localhost/v1/api.php

1 Ответ

0 голосов
/ 23 мая 2018

Просто для полноты: приведенный выше пример работает.Решение проблемы было частью PHP на стороне сервера, где я проверил тип контента и использовал strpos для поиска application/json в $_SERVER['CONTENT-TYPE'] и переключил needle и haystack (таким образом ища application/json; charset=UTF8 в строке application/json вместо наоборот).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...