В HttpURLConnection Почему не работает JSONObject как Params, а работает String как Params

Я использую HttpUrlConnection для отправки некоторых данных на мой сервер, вот функция:

private String register(String myurl) throws IOException {

String resp = null;
try {
JSONObject parameters = new JSONObject();
// parameters.put("jsonArray", ((makeJSON())));
parameters.put("key", "key");//getencryptkey());
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//  conn.setReadTimeout(10000 /* milliseconds *///);
//  conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
OutputStream out = new BufferedOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
writer.write(parameters.toString());
writer.close();
out.close();

int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();


while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("strngbuffr" + response.toString());
resp = response.toString();

} catch (Exception exception) {
System.out.println("Exception: " + exception);
}

System.out.println("rsp"+ resp.toString());
return resp.toString();
}

Я получаю код ответа как 200, что означает, что соединение в порядке, однако я получаю пустые переменные на стороне PHP, что здесь может быть не так?

Ранее я тоже отправлял массив JSON, но для проверки функциональности я прокомментировал, что сейчас я отправляю только одну переменную key as "key"

Удивительно видеть, что этот пример кода работает — без массива JSON и пар ключ-значение:

private String sendPost(String url) throws Exception {

String USER_AGENT = "Mozilla/5.0";
URL obj = new URL(url);

HttpURLConnection con = (HttpURLConnection) obj.openConnection();

//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

String urlParameters ="sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();

int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();

//print result
System.out.println("rvsp"+response.toString());

return response.toString();
}

Таким образом, все сводится к замене этого:

 JSONObject parameters = new JSONObject();
parameters.put("jsonArray", new JSONArray(Arrays.asList(makeJSON())));
parameters.put("key", getencryptkey());

этим:

String urlParameters ="jArr="+makeJSON()+"Key="+getencryptkey();

и мне все еще любопытно

3

Решение

Я считаю, что проблема здесь не на стороне Java. Если параметры имеют фиксированный тип, как в вашем случае с json, метод JSON Object as POST params будет работать, если он собран таким образом на стороне php:

<?php
$json = file_get_contents('php://input');
$obj = json_decode($json);
print_r($obj);
print_r("this is a test response");
?>
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]