2008-10-30 15 views
10

यदि मेरे पास एक यूआरएल है (उदाहरण के लिए http://www.foo.com/alink.pl?page=2), तो मैं यह निर्धारित करना चाहता हूं कि मुझे किसी अन्य लिंक पर रीडायरेक्ट किया जा रहा है या नहीं। मैं अंतिम यूआरएल भी जानना चाहूंगा (उदाहरण के लिए http://www.foo.com/other_link.pl)। अंत में, मैं पर्ल और ग्रोवी में ऐसा करने में सक्षम होना चाहता हूं।मैं कैसे निर्धारित कर सकता हूं कि एक यूआरएल रीडायरेक्ट करता है या नहीं?

उत्तर

16

पर्ल में:

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new; 

my $request = HTTP::Request->new(GET => 'http://google.com/'); 
my $response = $ua->request($request); 
if ($response->is_success and $response->previous) { 
    print $request->url, ' redirected to ', $response->request->uri, "\n"; 
} 
+3

एस/जीईटी/हेड /। Google.com के साथ यह कोई तेज़ प्रतीत नहीं होता है, लेकिन microsoft.com के साथ इसे आजमाएं ... –

8

ठीक है, मुझे पर्ल या ग्रोवी के बारे में कुछ भी नहीं पता है, इसलिए मैं आपको एक HTTP दृष्टिकोण से एक और दूंगा, और आपको अनुकूलित करना होगा।

आम तौर पर, आप एक HTTP अनुरोध करते हैं, और आप प्रतिक्रिया कोड के साथ कुछ HTML पाठ वापस लेते हैं। सफलता के लिए प्रतिक्रिया कोड 200 है। 300 रेंज में कोई भी प्रतिक्रिया कोड रीडायरेक्ट का कुछ रूप है।

2

पर्ल में आप LWP::Useragent का उपयोग कर सकते हैं। मुझे लगता है कि add_handler का उपयोग कर response_redirect हैंडलर जोड़ने का सबसे आसान तरीका है।

4

जेम्स के जवाब का जिक्र करते हुए - नमूना HTTP सत्र:

$ telnet www.google.com 80 
HEAD/HTTP/1.1 
HOST: www.google.com 


HTTP/1.1 302 Found 
Location: http://www.google.it/ 
Cache-Control: private 
Content-Type: text/html; charset=UTF-8 
Set-Cookie: ############################## 
Date: Thu, 30 Oct 2008 20:03:36 GMT 
Server: #### 
Content-Length: 218 

सिर का इस्तेमाल प्राप्त करने के बजाय आप केवल शीर्ष लेख मिलता है। "302" का मतलब अस्थायी पुनर्निर्देशन है, "स्थान:" वह जगह है जहां आपको रीडायरेक्ट किया जाता है।

3

एक त्वरित & गंदा ग्रूवी अवधारणाओं को दिखाने के लिए स्क्रिप्ट - ध्यान दें, यह java.net.HttpURLConnection

उपयोग कर रहा है आदेश में रीडायरेक्ट पता लगाने के लिए, आप setFollowRedirects(false) उपयोग करना होगा। अन्यथा, आप 200 9 के responseCode के साथ किसी भी तरह रीडायरेक्ट पेज पर समाप्त हो जाते हैं। इसके बाद आपको रीडायरेक्ट को नेविगेट करना होगा।

URL url = new URL ('http://google.com') 
HttpURLConnection conn = url.openConnection() 
conn.followRedirects = false 
conn.requestMethod = 'HEAD' 
println conn.responseCode 
// Not ideal - should check response code too 
if (conn.headerFields.'Location') { 
    println conn.headerFields.'Location' 
} 

301 
["http://www.google.com/"] 
1

मुझे लगता है कि यह 301 रीडायरेक्ट के लिए काम करेगा।

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new; 

my $request = HTTP::Request->new(GET => 'http://google.com/'); 
my $response = $ua->request($request); 
if ($response->is_redirect ) { 
    print $request->url . " redirected to location " . $response->header('Location') . "\n"; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे