Problem in httpurlconnection immer status 500
Ich versuche, das login-url und ich bekomme den status code 500 in httpurlconnevtion
public static String excutePost(String targetURL, String urlParameters)
{
URL url;
HttpURLConnection connection = null;
try {
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setRequestProperty("Accept-Encoding", "");
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream ());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
System.out.println("status :"+connection.getResponseCode());
System.out.println("getErrorStream() :"+connection.getErrorStream());
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(connection != null) {
connection.disconnect();
}
}
}
und mein params sind
String urlParameters =
"pwd1=" + URLEncoder.encode("DEMO123", "UTF-8") +
"&badge=" + URLEncoder.encode("1233", "UTF-8");
ich bin immer logcat
status :500
getErrorStream() :libcore.net.http.FixedLengthInputStream@417bc5c0
danke
**EDITED 2**
Ich versuche auch mit
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
//Add badge
dos.writeBytes(LINE_START + BOUNDRY + LINE_END);
dos.writeBytes("Content-Disposition: form-data; name='badge';");
dos.writeBytes(LINE_END + LINE_END);
dos.writeBytes("1233");
dos.writeBytes(LINE_END);
//Add password
dos.writeBytes(LINE_START + BOUNDRY + LINE_END);
dos.writeBytes("Content-Disposition: form-data; name='pwd1';");
dos.writeBytes(LINE_END + LINE_END);
dos.writeBytes("DEMO123");
dos.writeBytes(LINE_END);
InformationsquelleAutor Android | 2013-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
500
bezeichnet eineInternal Server Error
. Es ist wahrscheinlich kein Fehler auf Ihrer Seite, es ist auf dem server. Auch wenn Sie das senden etwas falsch und es ist was zu dem server zurückkehren, 500, es ist immer noch ein server-problem.Edit:
Okey, der server sollte eher etwas von dem zurückgeben, wie
400 Bad Request
statt500 Internal Server Error
aber ich fand deinen Fehler jetzt:Das problem hier ist, dass Ihr zuerst die bytes von
urlParameters
mitgetBytes
die (Zitat javadoc):Und dann schreibst du die bytes mit
DataOutputStream.writeBytes
die (Zitat javadoc):In der Zusammenfassung, Ihre
Content-Length
entspricht nicht den Daten. Also der server gibt Ihnen dieLösung:
Edit 2:
Edit 1 ist definitiv gültig, jedoch, mit Blick auf das problem hier, glaube ich, der Fehler ist definitiv verursacht durch den server. Ich denke, der server ist wieder eine schlechte
Content-Length
- header und, wenn die Daten gelesen werden, die auf Android, das system erkennt, gibt es mehr Daten, die vom server kommt, als es sein sollte von derContent-Length
und löst eine Ausnahme aus, auch das ersetzen der status code 500, weil es wirklich ein server-Fehler.Edit 3:
Anstatt
Content-Language
ist nicht nötig, hier sollten SieContent-Encoding
zuUTF-8
und anstatt eines leerenAccept-Encoding
sollten Sie den real erwarteten MIME-Typ. Ich glaube, dies ist ein server-Fehler, aber Sie würde es vielleicht nicht angezeigt, wenn Sie die request-Header korrekt.Ja, es ist ein server-Problem. Zeigen Sie uns-server-code.
es arbeitet perfekt mit ios, und ich habe Hinzugefügt, server-code in meiner Frage plz überprüfen
wie synchroner request auf dem server? Sie haben eine Idee?
Bearbeitet die Antwort.
InformationsquelleAutor Sulthan
Status code
500
bedeutetInternal Server Error
. Warum das so ist auf Sie geworfen, nur der server hintertargetURL
weiß.Stellen Sie sicher, dass Sie machen die richtige Verwendung der API. Ein Blick auf die Reaktion der Körper (neben dem status-code) können Sie einen Hinweis geben.
prüfen Sie die Verbindung.getErrorStream();
InformationsquelleAutor slezica