2017-01-06 1 views
4

Java 클라이언트에서 HTTP 요청을 보내기 위해 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()과 같은 연결에 의존하는 작업을 호출하는 경우 연결합니다. 이러한 연결이 이미 설정되어 있지 않은 경우

,이 URL에 의해 참조되는 자원에의 통신 링크를 엽니 다. 연결이 이미 열려있는 경우 (연결 필드의 값이 true로 표시됨) 연결시 메서드가 호출되면 이 무시됩니다.

URLConnection 객체는 두 단계로 진행됩니다. 먼저 URL이 만들어지면 이 연결됩니다. 생성 된 후 이 연결되기 전에 다양한 옵션을 지정할 수 있습니다 (예 : 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

관련 문제