java - 来自 HTTP POST 请求的 500 内部错误

标签 java android

我正在使用以下代码通过 HTTP POST 上传文件,但我从服务器收到 500 Internal Server Error 响应。

能否请您看一下,让我知道哪个代码部分是罪魁祸首/缺失。 HTTPS 连接没有错误,我认为 header 中存在问题,因此服务器不接受此请求。

    // 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");
    }

谢谢

最佳答案

500 Internal Server Error 是服务器错误,即。问题出在服务器端,而不是客户端。您需要检查服务器日志以了解问题所在。

标题很好。如果 header 错误,您将收到 400 Bad Request 或其他一些 4xx 错误。

关于java - 来自 HTTP POST 请求的 500 内部错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258554/

相关文章:

java - SignalR 调用已取消

android - 停止在 WebView 中显示软键盘

android - 如何从 TypedArray 获取标志属性?

java - 使用 Maven 构建 Hadoop 时出错

java - 如何在 Joda-Time 中仅解析带时区的日期?

java - 打印ABC…的问题以及Java中的数字

java - 枚举和android注解intDef

java - 如何使用 xStream 反序列化多个对象

java - 在 HTTP 请求中发送多个对象 (Spring)

php - 当 StringBuilder 为 Null 时,它不会继续