URLConnection.setDoOutput () को वास्तव में क्या प्रभावित करता है?


80

नहीं है setDoOutput()में URLConnectionप्रलेखन के अनुसार मुझे चाहिए

यदि आप आउटपुट के लिए URL कनेक्शन का उपयोग करने का इरादा रखते हैं, तो DoOutput ध्वज को सही पर सेट करें, यदि नहीं।

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

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

जवाबों:


96

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

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

conn.getOutputStream().write(someBytes);

यदि मैं एक छवि डाउनलोड कर रहा हूँ तो क्या होगा?
जयदेव

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

27

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


2
ठीक है, मैं कैसे इस कनेक्शन को PUT करने के लिए मजबूर कर सकता हूं क्योंकि दूसरी तरफ सर्वर केवल PUT अनुरोध स्वीकार कर रहा है, POST नहीं ...?
ante.sabo

अगर मैं एक छवि डाउनलोड कर रहा हूँ तो क्या होगा?
जयदेव

1

एक टिप्पणी जोड़ना, यदि आपके पास लंबे समय तक चलने वाला कनेक्शन है और आप GET और 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

0
public void setDoOutput( boolean dooutput )

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

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


3
मैंने पूछा है कि प्रलेखन में पहले पढ़ें। कारण मैं पूछ रहा हूँ मैं उन लोगों के निहितार्थ नहीं है।
शार्प्यूट 10

यदि आप एक कनेक्शन ऑब्जेक्ट पर लिखना चाहते हैं जो आपको serDoOutput सेट करने के लिए मिला है
मिथुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.