2017-01-06 16 views
4

私はJavaクライアントでJavaリクエストを送信するためにjava.netを使用していますが、実際にリクエストを実行する方法はまだわかりません。リクエストが送信されることはありませんjava.net HTTPリクエストを発生させる方法

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); 
System.out.println(br.readLine()); 

:私はこれらの行を使用しない場合は、このコードでは

Scanner sc = new Scanner(System.in); 

System.out.println("Deleting subject..."); 
System.out.println("Subject shortcut (-1 for return):"); 
String shortcut = sc.next(); 
if(shortcut.equals("-1")) 
    return ; 

try 
{ 
    URL url = new URL("http://localhost:8080/Server/webresources/subject/delete/"+shortcut); 
    HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
    con.setDoOutput(true); 
    con.setRequestMethod("DELETE"); 

    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    System.out.println(br.readLine()); 
}catch(Exception e) 
{ 
    System.out.println(e.getMessage()); 
} 

は、例えば、私はこのコードを持っています。したがって、この場合、リクエストは接続からInputStreamを呼び出すことによってトリガーになるようです。

java.net経由のHTTPリクエストはどのように発せられますか?

+0

可能な複製(http://stackoverflow.com/questions/2793150/using-java-net-urlconnection-to-fire-and -handle-http-requests) – Michael

+1

その質問に対する最初の答えはかなり詳細になります。基本的には、入力ストリームから読み込んだときにリクエストが送信されることが正しいです。 – Michael

+1

@Michael URLConnection#投稿したトピックに書かれているようにconnect()が機能しません。 – scarface

答えて

5

connect()を呼び出した場合、または接続に依存する操作をgetInputStream()などと呼び出す場合は、ドキュメントからHttpURLConnectionが接続されます。

このような接続がすでに確立されていない場合、このURLが参照するリソースへの通信リンクを開きます。接続が既に開かれているときに接続 メソッドが呼び出された場合(接続フィールドの値がtrueの場合)、呼び出しは無視され、 は無視されます。

URLConnectionオブジェクトは2つのフェーズを経ます:最初に作成されたオブジェクトは です。作成後、 が接続される前に、さまざまなオプションを指定できます(doInputや UseCachesなど)。接続後、設定しようとするとエラーになります。 接続に依存する操作、getContentLengthのように、 は、必要に応じてを暗黙的に実行します。

しかし、いくつかのトピックはconnect()は、実際のコミット要求をしないことを示しますが、getInputStream()(最も可能性の高いいずれかの方法がgetResponseCode()例えば、サーバの応答を読んで)、以下となります。

Java URLConnection - When do I need to use the connect() method?

Why does HttpURLConnection not send the HTTP request

How to send PUT, DELETE HTTP request in HttpURLConnection?

+0

残念ながら、私が 'connect()'を呼び出すと、ノイズが発生します。 – scarface

+0

@scarface:これは奇妙ですが、次のトピックからのコメントで同じことが述べられているので、正しいはずです。http://stackoverflow.com/questions/1051004/how-to-send-put-delete-http-request -in-httpurlconnection – Berger

+0

これらのトピックを確認します。とにかく、実際にはサーバーから何も出力されない場合、InputStreamを取得するのは変です。ちなみに私が応答番号を要求すると、要求が送信されます。 – scarface

0

このURLのプロトコルハンドラのメソッドURLStreamHandler.openConnection(URL)を呼び出すたびに、URLConnectionの新しいインスタンスが作成されます。

URLConnectionインスタンスは、作成時に実際のネットワーク接続を確立しないことに注意してください。これは、URLConnection.connect()を呼び出すときにのみ発生します。 [HTTPリクエストを発射し、処理するためにjava.net.URLConnectionを使用]のsee javadoc

String url = "http://example.com"; 

    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    con.setRequestMethod("GET"); 

    //add request header 
    con.setRequestProperty("User-Agent", USER_AGENT); 

    int responseCode = con.getResponseCode(); 
+0

これはクールですが、私の質問には答えませんでした。 InputStreamを取得する代わりに、私はresponseCodeを取得し、それだけです。それは説明ではありません。 – scarface

関連する問題