문제

HTTP를 생성하면 java.net.URL 그런 다음 전화 openConnection() 그것에 대해 반드시 HTTP 게시가 일어날 것이라는 것을 의미합니까?나는 그것을 안다 openStream() GET을 의미합니다.그렇다면 원시 소켓 계층을 사용하지 않고도 다른 HTTP 동사 중 하나를 어떻게 수행할 수 있습니까?

도움이 되었습니까?

해결책

검색하면 URLConnection 객체를 사용하여 openConnection() 실제로 서버와의 통신을 시작하지 않습니다.스트림을 얻을 때까지는 그런 일이 발생하지 않습니다. URLConnection().처음 연결을 받으면 실제로 열기 전에 헤더 및 기타 연결 속성을 추가/변경할 수 있습니다.

URLConnection의 수명주기는 약간 이상합니다.스트림 중 하나를 얻을 때까지 서버에 헤더를 보내지 않습니다.입력 스트림을 얻은 경우 GET을 수행하고 헤더를 보낸 다음 출력을 읽을 수 있다고 생각합니다.출력 스트림을 얻으면 데이터를 쓸 것이라고 가정하므로 이를 POST로 보낸다고 생각합니다(호출해야 할 수도 있습니다). setDoOutput(true) 출력 스트림이 작동하려면).입력 스트림을 받자마자 출력 스트림이 닫히고 서버의 응답을 기다립니다.

예를 들어 다음은 POST를 수행해야 합니다.

URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);

OutputStream os = conn.getOutputStream();
os.write("Hi there!");
os.close();

InputStream is = conn.getInputStream();
// read stuff here

이는 GET을 수행하지만:

URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);

InputStream is = conn.getInputStream();
// read stuff here

URLConnection 다른 이상한 일도 할 것입니다.서버가 콘텐츠 길이를 지정하는 경우 URLConnection 그만큼의 데이터를 수신할 때까지 기본 입력 스트림을 열어 둡니다. 명시적으로 닫더라도.이로 인해 클라이언트를 완전히 종료하는 것이 약간 어려워지면서 우리에게 많은 문제가 발생했습니다. URLConnection 네트워크 연결을 열어두겠습니다.방금 사용하더라도 아마도 존재할 것입니다. getStream() 그렇지만.

다른 팁

아니 그렇지 않아.그러나 URL의 프로토콜이 HTTP인 경우에는 HttpURLConnection 반환 개체로.이 수업에는 setRequestMethod 사용하려는 HTTP 메서드를 지정하는 메서드입니다.

좀 더 정교한 작업을 수행하려면 다음과 같은 라이브러리를 사용하는 것이 더 나을 것입니다. 자카르타 HttpClient.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top