2016-03-21 5 views
0

Ich habe mit der Slack-API in Java gearbeitet und habe versucht, eine HTTP-Methode zu erhalten, die wie mein Beispielcode unten verwendet werden kann. Dieser Codeblock funktioniert, aber das Problem ist, dass ich auch einen 200-Response-Code einfügen muss und nicht herausfinden kann, wie er funktioniert.Java HTTP Beitrag Hilfe

Wie kann ich, in Java, einen HTTP-Post senden und auch den 200-Statuscode mit der URL und dem Inhalt markieren?

Aktueller Code:

public void httpRequest(URL url, String content) { 
try { 
    byte[] contentBytes = content.getBytes("UTF-8"); 

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 
    connection.setRequestProperty("Accept-Charset", "UTF-8"); 
    connection.setRequestProperty("Content-Type", "application/json"); 
    connection.setRequestProperty("Content-Length", Integer.toString(contentBytes.length)); 
    connection.setRequestProperty("Status", Integer.toString(200)); 

    OutputStream requestStream = connection.getOutputStream(); 
    requestStream.write(contentBytes, 0, contentBytes.length); 
    requestStream.close(); 

    String response = ""; 
    BufferedReader responseStream; 
    response = "" + ((HttpURLConnection) connection).getResponseCode(); 
    try { 
    if (((HttpURLConnection) connection).getResponseCode() == 200) { 
    responseStream = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); 
    } else { 
    responseStream = new BufferedReader(new InputStreamReader(((HttpURLConnection) connection).getErrorStream(), "UTF-8")); 
    } 
    response = responseStream.readLine(); 
    responseStream.close(); 
    } catch (NullPointerException ignored) { 

    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
} 
+0

Versuchen Sie, für eine 200 Antwort vom Server zu überprüfen? Es klang ein bisschen so als würdest du es irgendwie versuchen. * "Tag auf dem 200 Status-Code mit der URL und dem Inhalt" * ist sehr verwirrend. –

+0

Müssen Sie auch die 'HttpURLConnection' Klasse anstelle einer HTTP Bibliothek verwenden? Es ist viel schwieriger. –

+0

@AndrewRegan Nein, ich überprüfe nicht, ich versuche, einen zu der Nachricht hinzuzufügen, die ich sende. Und können Sie mich mit der Dokumentation für die HTTP-Bibliothek verbinden, von der Sie sprechen? – StaticShadow

Antwort

0

Der Aufruf von setDoOutput (true) einen Post-Trigger, dh Sie können nicht

connection.setRequestMethod("POST"); 

Hinzufügen eines Status-Header hinzufügen müssen, um die Anforderung möglich ist , wie Sie getan haben, aber in der Regel verbindet man Statuscodes mit http Antworten, keine Anfragen. - Und natürlich würde das Hinzufügen eines solchen benutzerdefinierten Headers nur dann sinnvoll sein, wenn der Server diese Informationen für irgendetwas verwenden würde.

Siehe this große, und hoch bewertete Antwort auf java.net.HttpURLConnection.

Sie haben auch einige Probleme in Bezug auf Ihre Antwortvariable sowie den BufferedReader. Sie überschreiben versehentlich den Wert, den Sie ursprünglich dem Feld der Antwort zugewiesen haben, anstatt zu verketten. Auch Ihre readline() sollte wahrscheinlich in einer Schleife sein:

String tmp; 
while ((tmp = responseStream.readLine()) !=null){ 
     response += tmp; 
} 
+0

Dies soll eine Antwort auf einen Slash-Befehl sein (https://api.slack.com/slash-commands). Die Nachricht zeigt sich entsprechend in slack, aber ich weiß, dass slack meine Methode zum Taggen nicht erkennt Code als die Fehlermeldung erscheint im Chat (Strg + F für "http 200") Gibt es eine andere Möglichkeit, die ich reagieren sollte? – StaticShadow

+0

Nachdem ich darüber nachgedacht habe, sollte der 200 Post vielleicht ein separater Anruf sein .. – StaticShadow