2016-03-21 6 views
0

私はJavaのSlack APIを使っていて、以下のコードブロックのように使用できるHTTPメソッドを取得しようとしています。そのコードブロックは機能しますが、問題には200応答コードも含める必要があり、動作させる方法を理解できません。Java HTTPポストヘルプ

基本的に、私はJavaでHTTP POSTを送信し、URLとコンテンツを使用して200ステータスコードにタグを付けることはできますか?

現在のコード:

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

は、サーバーからの200の応答をチェックしようとしていますか?何とかあなたを送ろうとしているように、ちょっと聞こえました。 * "URLとコンテンツを使用して200ステータスコードにタグを付ける" *は非常に混乱します。 –

+0

また、HTTPライブラリではなく、 'HttpURLConnection'クラスを使う必要がありますか?それははるかに難しいです。 –

+0

@AndrewReganいいえ、私はそれをチェックしていません、私は送信しているメッセージに1つを追加しようとしています。あなたが話しているHTTPライブラリのドキュメントに私をリンクすることはできますか? – StaticShadow

答えて

0

あなたが要求にステータスヘッダを追加

connection.setRequestMethod("POST"); 

を追加する必要はありません。すなわちsetDoOutput(真)への呼び出しは、ポストをトリガが可能ですあなたが行ったように、通常はステータスコードをhttp の応答と関連付けますが、要求は要求しません。 - もちろん、カスタムヘッダーを追加することは、サーバーがこの情報を何かに使用するように設計されている場合にのみ意味をなさないでしょう。

thisを参照してください。java.net.HttpURLConnectionについて大きく回答しました。

また、応答変数とBufferedReaderに関するいくつかの問題があります。最初に応答フィールドに割り当てた値を、連結するのではなく、誤って上書きしてしまいます。また、あなたののreadLine()は、おそらくループにする必要があります:

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

これはSlackのスラッシュコマンドコール(https://api.slack.com/slash-commands)への応答であると考えられています。メッセージは適切にスラックに表示されますが、スラックは自分のタグ付け方法を認識していませんエラーメッセージがチャットに表示されるので、コードを入力してください(「http 200」の場合はctrl + f)応答が必要な別の方法はありますか? – StaticShadow

+0

それを考えた後、おそらく200ポストは別のコールになっているはずです。 – StaticShadow

関連する問題