Запрос POST выдает исключение FileNotFoundException для URL-адреса
Я делаю запрос POST Http к URL-адресу https://nitos.gr в андроид.
URL-адрес не имеет доменного имени. Stackoverflow не позволяет мне включать URL-адрес с цифрами в текст, поэтому я просто пишу случайный URL-адрес https://nitos.gr за пример.
Я получаю код ответа 400 и печатаю getErrorStream(), что дает libcore.net.http.UnknownLengthHttpInputStream@41eba330
Однако я успешно выполнил HTTP-запрос GET. URL-адрес https, поэтому у меня есть фальшивый менеджер доверия, разрешающий все соединения SSL.
В итоге:
Протокол: HTTPS
Запрос GET: выполнен успешно
Запрос POST: не выполнен
Код запроса: 400
Сообщение об ошибке: java.io.FileNotFoundException: https://nitos.gr
ErrorStream: java.io.FileNotFoundException: https://nitos.gr
Метод выполнения POST-запроса следующий:
public void setTestbedData(String path, String data) {
HttpURLConnection con = null;
try {
con = (HttpURLConnection) ( new URL(Constants.BASE_URL + path)).openConnection();
// If you invoke the method setDoOutput(true) on the URLConnection, it will always use the POST method.
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Content-Type", "application/json");
Log.i("data", data);
OutputStream outputStream = con.getOutputStream();
outputStream.write(data.getBytes());
outputStream.flush();
Log.w("RESPONSE CODE", "code " + con.getResponseCode());
Log.w("this is connection ",""+con);
InputStream errorstream = con.getErrorStream();
Log.w("GetErrorStream ", ""+errorstream);
InputStream _is;
if (con.getResponseCode() >= 400) {
_is = con.getInputStream();
} else {
_is = con.getErrorStream();
String result = getStringFromInputStream(_is);
Log.i("Error != 400", result);
}
if (con.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ con.getResponseCode());
}
BufferedReader responseBuffer = new BufferedReader(new InputStreamReader((con.getInputStream())));
String output;
Log.i("TestbedHttpClient","Output from Server:");
while ((output = responseBuffer.readLine()) != null) {
Log.i("Output",output);
}
con.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Сообщения об ошибках:
КОД ОТВЕТА (18936): код 400 libcore.net.http.HttpsURLConnectionImpl$HttpUrlConnectionDelegate:https://nitos.gr GetErrorStream(18936): libcore.net.http.UnknownLengthHttpInputStream@41eba330 System.err(18936): java.io.FileNotFoundException: https://nitos.gr System.err(18936): в libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
BufferedReader
). Затем вы увидите, что говорит сервер. Это будет всего лишь крошечный шаг, чтобы узнать, что вы сделали неправильно... - person hgoebl   schedule 24.08.2014