2011-12-21 9 views
60

URLConnection मेंहै। documentation के अनुसार मैंURLConnection.setDoOutput() को वास्तव में क्या करता है?

सच करने के लिए सेट करना चाहिए DoOutput झंडा यदि आप उत्पादन के लिए URL कनेक्शन, नहीं तो झूठी उपयोग करना चाहते हैं।

अब मैं exactly this problem का सामना करना पड़ रहा हूँ - एक बार setDoOutput(true) कहा जाता है और सर्वर केवल GET अनुरोधों का जवाब जावा रनटाइम POST करने के लिए अनुरोध बदल देता है। मैं समझना चाहता हूं कि अगर मैं कोड से setDoOutput(true) हटा देता हूं तो क्या होता है।

यह वास्तव में क्या प्रभावित करेगा? मान लीजिए कि मैंने इसे false पर सेट किया है - अब मैं क्या कर सकता हूं और अब मैं क्या नहीं कर सकता? क्या मैं GET अनुरोध करने में सक्षम हूं? इस विधि के संदर्भ में "आउटपुट" क्या है?

उत्तर

76

यदि आप भेजना चाहते हैं तो आपको इसे सत्य पर सेट करने की आवश्यकता है (आउटपुट) अनुरोध निकाय, उदाहरण के लिए POST या PUT अनुरोधों के साथ। जीईटी के साथ, आप आमतौर पर एक शरीर नहीं भेजते हैं, इसलिए आपको इसकी आवश्यकता नहीं है।

अनुरोध शरीर में ही भेजा जा रहा है कनेक्शन के उत्पादन धारा के माध्यम से किया जाता है:

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

सेट करना होगा यदि मैं कोई छवि डाउनलोड कर रहा हूं? – Jaydev

+0

डाउनलोड कर रहा है? या अपलोड कर रहे हैं? – Thilo

24

setDoOutput(true)POST और PUT अनुरोधों के लिए उपयोग किया जाता है। यदि यह false है तो यह GET अनुरोधों का उपयोग करने के लिए है।

+0

शायद पुट के लिए भी। – Thilo

+0

@ थिलो - अच्छा बिंदु। –

+1

ठीक है, तो मैं इस कनेक्शन को PUT करने के लिए कैसे मजबूर कर सकता हूं क्योंकि दूसरी ओर सर्वर केवल PUT अनुरोध स्वीकार कर रहा है, पोस्ट नहीं ...? –

0
public void setDoOutput(boolean dooutput) 

यह पैरामीटर के रूप में एक मूल्य लेता है और निर्धारित मूल्य को यह URLConnection के लिए doOutput क्षेत्र के इस मूल्य निर्धारित करता है।

इनपुट और/या आउटपुट के लिए एक यूआरएल कनेक्शन का उपयोग किया जा सकता है। यदि आप आउटपुट के लिए यूआरएल कनेक्शन का उपयोग करना चाहते हैं तो डू आउटपुट ध्वज को सही पर सेट करें, अगर नहीं तो गलत। डिफॉल्ट गलत है।

+3

मैंने यह पूछने से पहले प्रलेखन में पढ़ा है। कारण मैं पूछ रहा हूं कि मुझे उन पर प्रभाव नहीं पड़ता है। – sharptooth

+0

यदि आप किसी कनेक्शन ऑब्जेक्ट को लिखना चाहते हैं तो आपको serDoOutput true –

1

कोई टिप्पणी जोड़ने से, अगर आप एक लंबे समय तक चलने कनेक्शन है और आप दोनों हो जाता है और पोस्ट भेजने, इस मुझे क्या करना है:

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