2012-03-29 3 views
0

Ich versuche, einige Daten mit einigen Post-Daten an eine URL zu senden. Ich habe den folgenden Code ausprobiert: -Java Http POST funktioniert nicht wie erwartet?

try { 
     // Construct data 
     String data = URLEncoder.encode("appid", "UTF-8") + "=" + URLEncoder.encode("2", "UTF-8"); 
     data += "&" + URLEncoder.encode("secret", "UTF-8") + "=" + URLEncoder.encode("APPSECRET", "UTF-8"); 
     data += "&" + URLEncoder.encode("usermcaccount", "UTF-8") + "=" + URLEncoder.encode("NAME", "UTF-8"); 
     data += "&" + URLEncoder.encode("actiontype", "UTF-8") + "=" + URLEncoder.encode("ACTION", "UTF-8"); 
     data += "&" + URLEncoder.encode("serverip", "UTF-8") + "=" + URLEncoder.encode("IP", "UTF-8"); 


     // Send data 
     URL url = new URL("http://maiacraft.com/api/"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoInput(true); 
     conn.setRequestMethod("POST"); 
     DataOutputStream outStream; 


     OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream()); 

     //write parameters 
     writer.write(data); 
     writer.flush(); 
     writer.close(); 




    } catch (Exception e) { 
    } 

Noch scheint es nicht auf dem Server zu buchen. Der gesamte serverseitige Code funktioniert, da er eine Postanforderung von einer anderen Seite erlaubt, aber nicht von diesem Java-Code ...

Irgendwelche Ideen?

+1

Ich würde mit der Protokollierung von Ausnahmen beginnen. – hvgotcodes

+0

Überprüfen Sie auch den Antwortcode und den inputStream/errorStream gemäß dem Code –

+0

Sie können sich vielleicht [Apache HttpComponents] (http://hc.apache.org/) ansehen. – Perception

Antwort

3

Irgendwelche Ideen?

  1. Du bist gerade nicht den HTTP-Antwort-Status. Das wird Ihnen Hinweise geben, was falsch läuft. Der Antwortstatus kann verschiedene Arten von Dingen anzeigen; z.B. dass Ihre Anfrageparameter falsch sind, die URL falsch ist, Sie keine Berechtigung haben, Sie sich anmelden müssen, der Server heruntergefahren ist, und so weiter.

  2. Wenn Sie einen Nicht-2xx-Antwortcode erhalten, sind wahrscheinlich weitere Informationen im Antworttext vorhanden. Sie können darauf zugreifen, indem Sie den Fehlerstrom des Verbindungsobjekts öffnen und lesen.

  3. Überprüfen Sie die Serverprotokolle.

  4. Versuchen Sie, die gleiche Anfrage mit einem Webbrowser oder einem Dienstprogramm wie curl oder wget zu übermitteln. (Setzen Sie die POST-Argumente in eine Datei ... oder hängen Sie sie an die URL an.)

  5. Erfassen und untersuchen Sie sorgfältig die codierten POST-Daten, die Ihr Java-Programm tatsächlich sendet. Sie könnten das Programm ändern, um data zu drucken, bevor es gesendet wird, oder Sie können Wireshark (oder gleichwertig) verwenden, um die Anforderung von der Leitung zu lesen. Nachdem Sie die Daten erfasst haben, vergleichen Sie sie sorgfältig mit den Angaben in der HTML-Spezifikation zum Codieren von Formulardaten. siehe http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4

  6. Schließlich legen Sie in der Anforderung keinen Inhaltstypheader fest. Es kann durchaus sein, dass dies dazu führt, dass der Server die POST-Daten ignoriert. Lesen Sie die HTTP-Spezifikation für eine Beschreibung der Header, die festgelegt werden sollen. (In diesem Fall sollte man einen Inhaltstyp verwenden, der die aus mime-Typ "application/x-www-form-urlencoded" und der Inhalt codiert, den Sie verwenden - "UTF-8"; siehe http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17)


ich werde nicht die Ausnahme erwähnen Gräuel am Ende des Codebeispiels Quetschen ....

Ooops. Ich habe gerade getan :-)

Verwandte Themen