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
Werfen Sie einen Blick auf Ihre Server-Logdateien. 500 ist ein interner Serverfehler. Also solltest du die Lösung dort finden. – Jens
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
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 –