Pregunta

I'm trying to POST some data to an https url, in my android application, in order to get a json format response.

I'm facing two problems:

is = conn.getInputStream();

throws

java.io.FileNotFoundException

I don't get if i do something wrong with HttpsURLConnection.

The second problem arose when i debug the code (used eclipse); I set a breakpoint after

conn.setDoOutput(true);

and, when inspecting conn values, I see that the variable doOutput remain set to false and type GET.


My method for https POST is the following, where POSTData is a class extending ArrayList<NameValuePair>

private static String httpsPOST(String urlString, POSTData postData,  List<HttpCookie> cookies) {

    String result = null;
    HttpsURLConnection conn = null;
    OutputStream os = null;
    InputStream is = null;

    try {
        URL url = new URL(urlString);
        conn = (HttpsURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setUseCaches (false);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        if(cookies != null)
            conn.setRequestProperty("Cookie",
                    TextUtils.join(";", cookies));

        os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(postData.getPostData());
        writer.flush();
        writer.close();

        is = conn.getInputStream();
        BufferedReader r = new BufferedReader(
                new InputStreamReader(is));
        StringBuilder total = new StringBuilder(); 
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line);
        }
        result = total.toString();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
            }
        }
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
        if (conn != null) {
            conn.disconnect();
        }
    }

    return result;
}

A little update: apparently eclipse debug lied to me, running and debugging on netbeans shows a POST connection. Error seems to be related to parameters i'm passing to the url.

¿Fue útil?

Solución

FileNotFoundException means that the URL you posted to doesn't exist, or couldn't be mapped to a servlet. It is the result of an HTTP 404 status code.

Don't worry about what you see in the debugger if it doesn't agree with how the program behaves. If doOutput really wasn't enabled, you would get an exception obtaining the output stream.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top