2013-10-11 67 views
9

私は安心なWebサービスを持っており、POSTとGET HTTPリクエストを送信し、JAVAでhttpURLConectionでPUTとDELTEリクエストHTTPを送信する方法を示します。JAXのHttpURLConnectionでPUT、DELETE HTTPリクエストを送信する方法

+0

あなたは(https://github.com/hgoebl/DavidWebb)[DavidWebb]と呼ばれる小さなライブラリを使用することができるのHttpURLConnectionのネイティブの使用のための代替として。そこには、同様のライブラリのリストがあります。ネイティブにHttpURLConnectionを使用すると、面倒でエラーが発生しやすくなります。 – hgoebl

答えて

23

PUT

URL url = null; 
try { 
    url = new URL("http://localhost:8080/putservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
DataOutputStream dataOutputStream = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("PUT"); 
    httpURLConnection.setDoInput(true); 
    httpURLConnection.setDoOutput(true); 
    dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream()); 
    dataOutputStream.write("hello"); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally { 
    if (dataOutputStream != null) { 
     try { 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 
     } catch (IOException exception) { 
      exception.printStackTrace(); 
     } 
    } 
    if (httpsURLConnection != null) { 
     httpsURLConnection.disconnect(); 
    } 
} 

は私が@BartekMからDELETE要求を使用する場合は、この例外を取得

URL url = null; 
try { 
    url = new URL("http://localhost:8080/deleteservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("DELETE"); 
    System.out.println(httpURLConnection.getResponseCode()); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally {   
    if (httpURLConnection != null) { 
     httpURLConnection.disconnect(); 
    } 
} 
+0

感謝は完璧です!私はメソッドDELETEが必要です。 – user2816207

+0

htpURLConnection.connect()を呼び出す必要はありませんか?この機能は何のためですか? –

-1

あなたは

protected void doPut(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException; 

は、HTTPのPUT操作を実行し上書きすることができます。デフォルトの実装では、 HTTP BAD_REQUESTエラーが報告されます。 PUT操作は、FTP経由で ファイルを送信するのと同じです。このメソッドをオーバーライドするサーブレットの作者は、リクエストとともに送信されたContent- *ヘッダを とみなさなければなりません。これらのヘッダーには、 のコンテンツ長、コンテンツタイプ、コンテンツ転送エンコーディング、 コンテンツエンコーディング、コンテンツベース、コンテンツ言語、コンテンツロケーション、 コンテンツ-MD5、およびコンテンツ範囲が含まれます。 コンテンツヘッダーを受け入れることができない場合は、エラー応答(501)を発行し、要求を 破棄する必要があります。詳細については、HTTP 1.1 RFCを参照してください。

このメソッドは、「安全」または「冪等」である必要はありません。 PUTを介して要求された操作には、 ユーザーが責任を負うことができる副作用があります。必須ではありませんが、このメソッドをオーバーライドするサーブレット作成者 は、影響を受けるURI のコピーを一時記憶域に保存したい場合があります。

protected void doDelete(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException 

HTTPの削除操作を実行します。デフォルトの実装では、 にHTTP BAD_REQUESTエラーが報告されます。 DELETE操作では、クライアントが にURIを要求してサーバーから削除することができます。この方法では、 を「安全」または「冪等分」のいずれかにする必要はありません。 DELETEによって要求された操作には、ユーザーが責任を負う可能性のある副作用がある可能性があります。 必須ではありませんが、このメソッドをサブクラス化するサーブレット作成者は、影響を受けたURIのコピーを一時記憶域に保存したい場合があります( )。

+0

これらはサーブレットAPIメソッドですが、OPは私が思うHTTPクライアントについて質問しています –

+0

おそらく、彼はdoGetとdoPutを管理するサーブレットを既に実装していて、他の2つのオペレーションを実装する方法を知りたいと思っています – RamonBoza

+0

私はgetterとpostTを持って、削除を実装し、メソッドを置く必要があるが、tenngoの入力パラメータが私を助けることができるので来ない? - @MatthewGilliard – user2816207

4

を削除します。それを修正するには

java.net.ProtocolException: DELETE does not support writing 

を、ちょうどIこの指示を削除してください:

// httpURLConnection.setDoOutput(true); 

ソース:Sending HTTP DELETE request in Android

関連する問題