2015-05-15 20 views
7

Ich verwende unten Code zum Hochladen von Datei mit HTTP-POST, aber ich bekomme 500 interne Server Fehler Antwort vom Server.500 Interner Fehler von HTTP-POST-Anfrage

Können Sie bitte einen Blick und lassen Sie mich wissen, welcher Code Teil ist/fehlt. Es gibt keinen Fehler in der HTTPS-Verbindung, ich denke, ein Problem in Header, so dass Server diese Anfrage nicht akzeptiert.

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

Dank

+1

Werfen Sie einen Blick auf Ihre Server-Logdateien. 500 ist ein interner Serverfehler. Also solltest du die Lösung dort finden. – Jens

+1

500 ist ein Server-Side-Fehler, können Sie Ihre Anfrage in einem HTTP-Rest-Client (Postbote zum Beispiel, eine Browser-Erweiterung), mit den gleichen Parametern, wird es am Ende mit dem gleichen Ergebnis. – Mostrapotski

+0

Mein Jacht ist, dass Ihre Anfrage MaxRequestLen überschreitet, die in der Regel 131072 Bytes ist, können Sie mit einer kleinen Datei versuchen, um zu sehen, ob es funktioniert, aber um vollständig sicher sein Schwanz Fehler protokolliert während der Anfrage. tail -f /var/log/apache2/error.log –

Antwort

9

500 Internal Server Error ist ein Serverfehler, das heißt. Das Problem liegt auf der Serverseite, nicht auf der Clientseite. Sie müssen die Serverprotokolle überprüfen, um zu sehen, was das Problem ist.

Die Header sind in Ordnung. Wenn die Header falsch sind, erhalten Sie stattdessen 400 Bad Request oder einen anderen 4xx-Fehler.

Verwandte Themen