简体   繁体   中英

500 Internal error from HTTP POST request

I am using below code to upload file using HTTP POST, but I am getting 500 Internal Server Error response from server.

Can you please have a look and let me know which code part is culprit/missing. There is no error in HTTPS connection, I think some problem in Header so server is not accepting this request.

    // Check server address
    url = new URL("https://example.com");
    String protocol = url.getProtocol(); 
    String host = url.getHost();
    String serviceRoot = url.getPath();

    // Build POST request
    HttpPost post = new HttpPost(new URI(protocol + "://" + host
            + serviceRoot));
    post.addHeader("User-Agent", "Test");
    post.addHeader("Content-type", "multipart/form-data"); 
    post.addHeader("Accept", "image/jpg"); 
    String authValue = "Basic "
            + Base64
                    .encodeBase64ToString(("username" + ":"
                            + "password").getBytes()) + " " + "realm=\"example.com\"";
    if (authValue != null) {
        post.addHeader("Authorization", authValue);
    }

    File file = new File("/sdcard/Download/IMAG0306.jpg");
    FileBody data = new FileBody(file);

    String file_type = "jpg" ;
    String description = "Test";

    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("file_name", new StringBody( file.getName() ) );
    reqEntity.addPart("description", new StringBody(description));
    reqEntity.addPart("file_type", new StringBody(file_type));
    reqEntity.addPart("data", data);

    post.setEntity(reqEntity); 

    if (true) {
        String trace = ">>> Send HTTP request:";
        trace += "\n " + post.getMethod() + " "
                + post.getRequestLine().getUri();
        System.out.println(trace);
    }

    if (true) {
        String trace = "<<< Send HTTP request-->:";
        trace += "\n" + post.toString();
        Header[] headers = post.getAllHeaders();
        for (Header header : headers) {
            trace += "\n" + header.getName() + " " + header.getValue();
        }
        System.out.println(trace);
    }

    HttpClient httpClient = createHttpClient();
    // replace with your url
    // “Authorization”, “Basic ” + encodedUsernamePassword);
    if (httpClient != null) {
        response = httpClient.execute(post);
        if (true) {
            String trace = "<<< Receive HTTP response:";
            trace += "\n" + response.getStatusLine().toString();
            Header[] headers = response.getAllHeaders();
            for (Header header : headers) {
                trace += "\n" + header.getName() + " " + header.getValue();
            }
            System.out.println(trace);
        }
    } else {
        throw new IOException("HTTP client not found");
    }

Thanks

500 Internal Server Error is a server error, ie. the problem is on the server side, not client side. You need to check the server logs to see what the problem is.

The headers are fine. If the headers were wrong, you would get 400 Bad Request or some other 4xx error instead.

Check the server logs, especially if the endpoint is not being hit. In my case the error was: The request matched multiple endpoints. I had put other functions in the controller, which it thought were endpoints, but were not.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM