2013-01-17 13 views
7

से एक शीर्षलेख को निकालने का तरीका मैं एक फ़ाइल अपलोड सेवा से बात कर रहा हूं जो पोस्ट डेटा स्वीकार करता है, डेटा नहीं बनाता है। डिफ़ॉल्ट रूप से, जावा का HttpURLConnectionContent-Type शीर्षलेख application/x-www-form-urlencoded पर सेट करता है। अगर मैं शुद्ध डेटा पोस्ट कर रहा हूं तो यह स्पष्ट रूप से गलत है।URLConnection

i (क्लाइंट) सामग्री प्रकार नहीं जानता है, इसलिए मैं Content-Type शीर्ष पर सेट करने के लिए शीर्षलेख नहीं चाहता हूं। सेवा में एक सुविधा है जहां यह सामग्री प्रकार पर अनुमान लगाएगी (फ़ाइल नाम के आधार पर, फ़ाइल से कुछ डेटा पढ़ना आदि)।

मैं हेडर को कैसे सेट करूं? कोई हटाए गए हेडर नहीं है, और इसे null पर सेट करने से मूल्य बदल नहीं जाता है और इसे बिना किसी मान के सेट किए गए हेडर में रिक्त स्ट्रिंग परिणामों में सेट किया जाता है।

+1

क्या आपको इसके लिए कोई रास्ता मिला? – Arya

उत्तर

1

उपयोग अपाचे HttpClient बजाय URLConnection

उपयोग धाराप्रवाह Request आपके अनुरोध

उपयोग removeHeader()

+0

कोई विकल्प नहीं है, क्योंकि मुझे एक लाइब्रेरी तैयार करने की आवश्यकता है जो एंड्रॉइड और सादे जेएसई पर चल सकती है। समस्या w/android यह है कि यह httpclient के 4.x संस्करण को बंडल करता है जो किसी भी स्टैंडअलोन संस्करण के साथ मेल नहीं खाता है। यदि आप httpclient के विशिष्ट संस्करण को बंडल करने का प्रयास करते हैं, तो आपको संघर्ष मिलते हैं। –

+0

मैं Google छवि खोज (कस्टम खोज का उपयोग नहीं कर रहा) का उपयोग कर एक बॉट को लागू करने का प्रयास करता हूं, और Google छवि खोज लगता है कि 'सामग्री-प्रकार' और 'सामग्री-लंबाई' शीर्षलेख नहीं भेजता है, इसलिए मेरे पास एक ही समस्या है। और apache httpcomponents का HttpClient भी मेरे मामले में फिट नहीं है: HttpClient सॉक्स प्रॉक्सी का समर्थन नहीं करता है (एक चिमटा की आवश्यकता है, और मुझे यह पसंद नहीं है)। –

1

उत्पन्न करने के लिए मैं इस दृष्टिकोण का परीक्षण नहीं किया है, लेकिन आप यह कोशिश कर सकते हैं:

HttpURLConnection बढ़ाएं और इसके getContentHandler() और setContentHandler (...) विधियों को ओवरराइड करके आज़माएं। शायद यह इस तरह काम करना चाहिए, आप getContentHandler() के कोड पर एक नज़र डालेंगे।

0

आपका क्या मतलब है "मैं सामग्री-प्रकार शीर्षलेख को बिल्कुल सेट नहीं करना चाहता"?

ब्राउज़र (या अन्य http क्लाइंट) सर्वर पर आपका पोस्ट अनुरोध भेजता है, इसलिए इसे सर्वर को सूचित करना होगा जिस तरह से यह पैरामीटर को एन्कोड किया गया है।

यदि सामग्री-प्रकार शीर्षलेख सेट नहीं है, तो सर्वर पक्ष पर (= आपका सर्वर) समझने में सक्षम नहीं होगा कि प्राप्त डेटा को कैसे पार्स किया जाए।

यदि आपने सामग्री-प्रकार सेट नहीं किया है, तो डिफ़ॉल्ट मान का उपयोग किया जाएगा।

  1. संदेश कुंजी/मान जोड़े:

    आप ब्राउज़र (या अन्य http ग्राहक) चाहिए दो बातें।

  2. सर्वर को सूचित करें कि कुंजी/मूल्य जोड़े कैसे एन्कोड किए गए थे।

तो, इस हेडर से पूरी तरह से छुटकारा पाने के लिए असंभव है।

+0

मैं पैरामीटर नहीं भेज रहा हूं। यह फ़ाइल अपलोड है। मैं बाइनरी डेटा पोस्ट कर रहा हूँ। सेवा द्विआधारी सामग्री को बचाती है।सामग्री प्रकार की आवश्यकता का एकमात्र कारण फ़ाइल के लिए मेटा डेटा सेट करना है। –

+0

यदि आप Google छवि खोज में कोई छवि फ़ाइल अपलोड करते हैं, तो ब्राउज़र 'सामग्री-प्रकार' शीर्षलेख नहीं भेजता है, और 'सामग्री-लंबाई' शीर्षलेख भी गायब है। –

0

मैंने हेडर को शून्य पर सेट करके इसे अभी पूरा किया है।

connection.setRequestProperty(MY_HEADER, null); 
संबंधित मुद्दे