2011-12-21 1 views
60

setDoOutput()URLConnection에 있습니다. documentation에 따라URLConnection.setDoOutput()은 정확히 무엇에 영향을 줍니까?

출력을 위해 URL 연결을 사용하려면 DoOutput 플래그를 true로 설정하고 그렇지 않으면 false를 설정하십시오.

는 지금은 exactly this problem에 직면하고있어 - setDoOutput(true)를 호출하고 서버는 GET 요청에 응답되면 자바 런타임이 POST에 요청을 변환합니다. 코드에서 setDoOutput(true)을 제거하면 어떻게 될지 이해하고 싶습니다.

정확히 무엇이 영향을 줍니까? false으로 설정했다고 가정 해 봅시다. 지금 무엇을 할 수 있습니까? 지금 할 수없는 것은 무엇입니까? GET 요청을 수행 할 수 있습니까? 이 방법의 맥락에서 "산출물"은 무엇입니까?

답변

76

(출력) 요청 본문 (예 : POST 또는 PUT 요청)을 보내려면 true로 설정해야합니다. GET을 사용하면 대개 몸을 보내지 않으므로 필요하지 않습니다. 요청 본문 자체를 보내기

접속의 출력 스트림을 통해 이루어집니다 : 당신이 오래 지속 연결을 사용하는 경우,

conn.getOutputStream().write(someBytes); 
+0

이미지를 다운로드 할 경우 어떻게해야합니까? – Jaydev

+0

다운로드 중입니까? 업로드 하시겠습니까? – Thilo

24

setDoOutput(true)POSTPUT 요청에 사용됩니다. false 인 경우 GET 요청을 사용하는 것입니다.

+0

PUT 용일 수도 있습니다. – Thilo

+0

@Thilo - 좋은 지적. –

+1

좋아, 그럼 내가 다른 쪽의 서버가 POST가 아닌 PUT 요청만을 받아들이므로이 연결이 PUT을하도록 강제 할 수 있습니까? –

0
public void setDoOutput(boolean dooutput) 

그것은 매개 변수로 값을 취 지정된 값이 URLConnection doOutput 대한 필드의 값을 설정한다.

입력 및/또는 출력에 URL 연결을 사용할 수 있습니다. 출력을 위해 URL 연결을 사용하려면 DoOutput 플래그를 true로 설정하고 그렇지 않으면 false로 설정하십시오. 기본값은 false입니다.

+3

나는 물어보기 전에이 문서를 읽었습니다. 내가 묻는 이유는 그것들의 함의를 얻지 못하기 때문이다. – sharptooth

+0

연결 객체에 쓰려면 serDoOutput을 true로 설정해야합니다. –

1

코멘트를 추가하고 모두 가져 및 POST를 보내, 이것이 내가 할 것입니다 :

if (doGet) { // some boolean 
    con.setDoOutput(false); // reset any previous setting, if con is long lasting 
    con.setRequestMethod("GET"); 
} 
else { 
    con.setDoOutput(true); // reset any previous setting, if con is long lasting 
    con.setRequestMethod("POST"); 
} 

그리고 연결을 오래 유지하지 않으려면 매번 닫으십시오.

if (doClose) // some boolean 
    con.setRequestProperty("Connection", "close"); 

con.connect();    // force connect request 
관련 문제