FileNotFoundException while getting the InputStream object from HttpURLConnection

前端 未结 7 2088
清酒与你
清酒与你 2020-11-29 02:47

I am trying to send a post request to a url using HttpURLConnection (for using cUrl in java). The content of the request is xml and at the end point, the application proces

相关标签:
7条回答
  • 2020-11-29 02:58

    To anyone with this problem in the future, the reason is because the status code was a 404 (or in my case was a 500). It appears the InpuStream function will throw an error when the status code is not 200.

    In my case I control my own server and was returning a 500 status code to indicate an error occurred. Despite me also sending a body with a string message detailing the error, the inputstream threw an error regardless of the body being completely readable.

    If you control your server I suppose this can be handled by sending yourself a 200 status code and then handling whatever the string error response was.

    0 讨论(0)
  • 2020-11-29 03:03

    FileNotFound in this case means you got a 404 from your server - could it be that the server does not like "POST" requests?

    0 讨论(0)
  • 2020-11-29 03:04

    Please change

    con = (HttpURLConnection) new URL("http://localhost:8080/myapp/service/generate").openConnection();
    

    To

    con = (HttpURLConnection) new URL("http://YOUR_IP:8080/myapp/service/generate").openConnection();
    
    0 讨论(0)
  • 2020-11-29 03:09

    For anybody else stumbling over this, the same happened to me while trying to send a SOAP request header to a SOAP service. The issue was a wrong order in the code, I requested the input stream first before sending the XML body. In the code snipped below, the line InputStream in = conn.getInputStream(); came immediately after ByteArrayOutputStream out = new ByteArrayOutputStream(); which is the incorrect order of things.

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    // send SOAP request as part of HTTP body 
    byte[] data = request.getHttpBody().getBytes("UTF-8");
    conn.getOutputStream().write(data); 
    
    if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
      Log.d(TAG, "http response code is " + conn.getResponseCode());
      return null;
    }
    
    InputStream in = conn.getInputStream();
    

    FileNotFound in this case was an unfortunate way to encode HTTP response code 400.

    0 讨论(0)
  • 2020-11-29 03:16

    FileNotFound is just an unfortunate exception used to indicate that the web server returned a 404.

    0 讨论(0)
  • 2020-11-29 03:18

    The solution:
    just change localhost for the IP of your PC
    if you want to know this: Windows+r > cmd > ipconfig
    example: http://192.168.0.107/directory/service/program.php?action=sendSomething
    just replace 192.168.0.107 for your own IP (don't try 127.0.0.1 because it's same as localhost)

    0 讨论(0)
提交回复
热议问题