2013-02-24 21 views
9

का उपयोग कर पुनर्निर्देशित यूआरएल और सामग्री कैसे प्राप्त करें कभी-कभी मेरा यूआरएल एक नए पेज पर रीडायरेक्ट करेगा, इसलिए मैं नए पेज का यूआरएल प्राप्त करना चाहता हूं।HttpURLConnection

URL url = new URL("http://stackoverflow.com/questions/88326/"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setInstanceFollowRedirects(true); 

System.out.println(conn.getURL().toString()); 

उत्पादन होता है:

stackoverflow.com/questions/88326/does-elmah-handle-caught-exceptions-as-well

यहाँ मेरी कोड है

यह स्टैक ओवरफ़्लो वेबसाइट के लिए अच्छा काम करता है, लेकिन sears.com साइट के लिए, यह काम नहीं करता है।

अगर हम यूआरएल झटका दर्ज करें:

http://www.sears.com/search=iphone 

उत्पादन अभी भी है:

http://www.sears.com/search=iphone

लेकिन वास्तव में, पेज पर रीडायरेक्ट करेगा:

http://www.sears.com/tvs-electronics-phones-all-cell-phones/s-1231477012?keyword=iphone&autoRedirect=true&viewItems=25&redirectType=CAT_REC_PRED 

मैं इस समस्या को कैसे हल कर सकता हूं?

+0

सीअर्स लिंक HTTP रीडायरेक्ट नहीं है: 'curl --head -I http: // www.sears.com/search = iphone'। यह शायद जावास्क्रिप्ट के माध्यम से रीडायरेक्ट करता है। – apricot

उत्तर

1

असल में हम HttpClient का उपयोग कर सकते हैं, जिसे हम HttpClient.followRedirect (true) सेट कर सकते हैं HttpClinent रीडायरेक्ट चीजों को संभालेगा।

+0

यह सबसे अच्छा तरीका है ... या आपको बार-बार हेडर में रीडायरेक्ट लिंक लेना होगा ... जो बहुत जटिल है ... – user2105500

+0

आपके द्वारा किए गए कार्यों को विस्तारित करने की देखभाल है? मैं एक समान स्थिति में हूं –

18

सीधे शब्दों में URLConnection उदाहरण पर getUrl()getInputStream() बुला के बाद फोन:

URLConnection con = new URL(url).openConnection(); 
System.out.println("Orignal URL: " + con.getURL()); 
con.connect(); 
System.out.println("Connected URL: " + con.getURL()); 
InputStream is = con.getInputStream(); 
System.out.println("Redirected URL: " + con.getURL()); 
is.close(); 

आप को पता है कि क्या वास्तव में यह पुनर्निर्देशन सामग्री है, यहाँ नमूना कोड है से पहले हुआ की जरूरत है:

HttpURLConnection con = (HttpURLConnection) (new URL(url).openConnection()); 
con.setInstanceFollowRedirects(false); 
con.connect(); 
int responseCode = con.getResponseCode(); 
System.out.println(responseCode); 
String location = con.getHeaderField("Location"); 
System.out.println(location); 
+2

लेकिन अभी भी "http: // www.sears.com/search=iphone" के लिए काम नहीं करता है, कृपया मुझे यह जानने में मदद करें कि क्या हो रहा है? – user2105500

+0

फिर आप कुछ गलत कर रहे हैं, क्योंकि मेरा कोड काम करता है। – syb0rg

+0

आपका कोड stackoverflow.com/questions/88326/ के लिए काम करता है, लेकिन sear.com के लिए नहीं, मुझे लगता है कि sear.com एक रीडायरेक्ट नहीं है। यह सर्वर से कुछ मिलता है। – user2105500

-1

कोशिश HtmlUnit:

final WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://www.sears.com/search=phone"); 
String finalUrl = page.getUrl().toString(); // the redirected url 
संबंधित मुद्दे