2010-09-24 10 views
12

का उपयोग कर प्रतिक्रिया शीर्षलेख स्थान प्राप्त नहीं कर सकता है क्या कोई कृपया सुझाव दे सकता है कि मैं यहां क्या कर रहा हूं?
मैं जावा यहाँ का उपयोग कर एक निश्चित URL के लिए हैडर स्थान प्राप्त करने के लिए कोशिश कर रहा हूँ मेरी कोड है:जावा के URLConnection

URLConnection conn = url.openConnection(); 
String location = conn.getHeaderField("Location"); 

यह बाद से मैं निश्चित रूप से पता अजीब बात है यूआरएल मैं एक स्थान हैडर वापस जाने के लिए बात कर रहा हूँ और का उपयोग कर getContentType() या getContentLength() की तरह के तरीकों को पूरी तरह से काम करता है

आपकी सलाह बहुत हमेशा की तरह सराहना की :)

धन्यवाद

+0

और सवाल के लिए +1। –

उत्तर

14

शायद Location हेडर रीडायरेक्ट प्रतिक्रिया के हिस्से के रूप में वापस किया जाता है। यदि हां, तो URLConnection हैंडल उठाई संसाधन के लिए दूसरा अनुरोध जारी करके स्वतः रीडायरेक्ट, ताकि आप इसे निष्क्रिय करने के लिए की जरूरत है:

((HttpURLConnection) conn).setInstanceFollowRedirects(false); 

संपादित करें: आप वास्तव में पुन: निर्देशन लक्ष्य का URL की जरूरत है और नहीं करते हैं रीडायरेक्ट हैंडलिंग को अक्षम करना चाहते हैं, इसके बजाय आप getURL() पर कॉल कर सकते हैं (कनेक्शन स्थापित होने के बाद)।

+1

एक आकर्षण की तरह :) –

+0

बढ़िया! मेरे छोटे ज्ञान आधार के लिए एक मूल्यवान अतिरिक्त। +1 –

+0

अपना संपादन पुनः करें: यह और भी सुरुचिपूर्ण है! धन्यवाद –

0

बस एक axtavt's जवाब देने के लिए अनुवर्ती ... यूआरएल कई बार रीडायरेक्ट है, तो आप आदेश सीधा लिंक प्राप्त करने के लिए कुछ इस तरह कर सकता है:

String location = "http://www.example.com/download.php?getFile=1"; 
HttpURLConnection connection = null; 
for (;;) { 
    URL url = new URL(location); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setInstanceFollowRedirects(false); 
    String redirectLocation = connection.getHeaderField("Location"); 
    if (redirectLocation == null) break; 
    location = redirectLocation; 
}