2010-01-28 13 views
7

पर कॉल करता हूं तो जावा HttpURLConnection कनेक्ट नहीं होता है मैं अपने वेबपैड पर स्वचालित परीक्षण करने के लिए एक प्रोग्राम लिखने की कोशिश कर रहा हूं। इसे पूरा करने के लिए, मैं HttpURLConnection का उपयोग कर कनेक्शन खोलता हूं।जब मैं कनेक्ट()

मैं जिन पृष्ठों का परीक्षण करने की कोशिश कर रहा हूं उनमें से एक 302 रीडायरेक्ट करता है। मेरे परीक्षण कोड इस तरह दिखता है:

URL currentUrl = new URL(urlToSend); 
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection(); 
connection.connect(); 
system.out.println(connection.getURL().toString()); 

तो, मान लें कि urlToSend http://www.foo.com/bar.jsp है, और यह पेज http://www.foo.com/quux.jsp करने के लिए आप पुनर्निर्देश कि। मेरे println कथन http://www.foo.com/quux.jsp मुद्रित करना चाहिए, है ना?

WRONG।

रीडायरेक्ट कभी नहीं होता है, और यह मूल यूआरएल प्रिंट करता है। हालांकि, अगर मैं कनेक्शन.कनेक्ट() लाइन को कनेक्शन से कॉल के साथ स्विच करता हूं .getResponseCode(), यह जादुई रूप से काम करता है।

URL currentUrl = new URL(urlToSend); 
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection(); 
//connection.connect(); 
connection.getResponseCode(); 
system.out.println(connection.getURL().toString()); 

मैं यह व्यवहार क्यों देख रहा हूं? क्या मैं गलत हूं?

सहायता के लिए धन्यवाद।

उत्तर

16

connect() विधि बस एक कनेक्शन बनाता है। लौटने और संसाधित होने के जवाब के लिए आपको अनुरोध करना होगा (getInputStream(), getResponseCode(), या getResponseMessage() पर कॉल करके)।

+0

धन्यवाद, यह मामला प्रतीत होता है! – sangfroid

+1

इसके लिए धन्यवाद! यह समझने की कोशिश कर रहे थे कि लोग getInputStream() को क्यों जारी कर रहे हैं और कभी भी कनेक्ट() को कॉल किए बिना। आपने बस मुझे यह स्पष्ट किया है। – Renatinn

0

setFollowRedirects आज़माएं, क्योंकि इससे मदद मिल सकती है। असल में, यह देखने के लिए getFollowRedirects आज़माएं कि यह समस्या है या नहीं, सबसे पहले (डिफ़ॉल्ट रूप से यह डिफ़ॉल्ट रूप से सही नहीं है)।

संपादित करें: यदि यह आपकी समस्या नहीं है, मैं कनेक्शन से कुछ पढ़ने की कोशिश करेगा (के रूप में आप getResponseCode के साथ क्या लेकिन मैं यह भी getHeaderField अगर सब पर कुछ भी पढ़ने का सम्मान किया जाना रीडायरेक्ट का कारण बनता है देखने की कोशिश करेंगे)।

+0

में निम्नलिखित जोड़ें पहले से ही करने की कोशिश की है कि, getFollowRedirects सच देता है। इसके अलावा, मुझे एक अलग परीक्षण में setFollowRedirects के साथ एक अलग समस्या है। असल में, setInstanceFollowRedirects() कुछ भी नहीं करता है, जबकि setFollowRedirects() जो करता है वह करता है। हालांकि, मुझे लगा कि एक अलग पोस्ट में इसके बारे में पूछना बेहतर होगा क्योंकि यह एक अलग समस्या है। – sangfroid

+1

@sangfroid मुझे लगता है कि आपको लगता है कि रीडायरेक्ट को पढ़ने/सम्मानित करने के लिए आपको वास्तव में कनेक्शन से कुछ पढ़ना होगा। –

1

connect() विधि URLConnection क्लास में लागू की गई है, और HttpURLConnection कक्षा द्वारा ओवरराइड नहीं किया गया है।

URLConnection वर्ग HTTP के बारे में पता नहीं है, और इसलिए का पालन नहीं करना चाहिए HTTP अनुप्रेषित भले ही वह कोई वास्तविक संबंध बनाने गया था।

यदि आप HTTP प्रोटोकॉल के लिए आंतरिक व्यवहार चाहते हैं, तो संभवतः आप HttpURLConnection क्लास में लागू विधियों के साथ चिपकना चाहते हैं, क्योंकि getResponseCode() विधि है।

0

अपने onCreate

StrictMode.ThreadPolicy policy = new StrictMode. 
ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
संबंधित मुद्दे