URL को कर्ल के साथ पुनर्निर्देशित लक्ष्य प्राप्त करें


24

मैं यह जाँचना चाहूँगा कि एकल URL पुनर्निर्देशित कहाँ है। इसका एक उदाहरण Google के खोज परिणाम पृष्ठ (जहां एक क्लिक हमेशा Google सर्वर से गुजरता है) से एक लिंक हो सकता है।

क्या मैं ऐसा कर सकता हूं curl?

जवाबों:


18

इसे इस्तेमाल करे:

$ LOCATION=`curl -I http://raspberrypi.stackexchange.com/a/1521/86 | perl -n -e '/^Location: (.*)$/ && print "$1\n"'`
$ echo "$LOCATION"
/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521#1521

Google पुनर्निर्देश करता है

Google पुनर्निर्देशित URL थोड़े अलग हैं। वे एक जावास्क्रिप्ट पुनर्निर्देशित करते हैं, जिसे आसानी से संसाधित किया जा सकता है, लेकिन मूल URL को संसाधित करने और सभी को एक साथ कर्ल करने के लिए क्यों नहीं?

$ URL="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFAQFjAA&url=http%3A%2F%2Fwww.raspberrypi.org%2F&ei=rv8oUODIIMvKswa4xoHQAg&usg=AFQjCNEBMoebclm0Gk0LCZIStJbF04U1cQ"
$ LOCATION=`echo "$URL" | perl -n -e '/url=([a-zA-Z0-9%\.]*)/ && print "$1\n"'`
$ echo "$LOCATION"
http%3A%2F%2Fwww.raspberrypi.org%2F
$ echo "$LOCATION" | perl -pe 's/%([0-9a-f]{2})/sprintf("%s", pack("H2",$1))/eig'
http://www.raspberrypi.org/

संदर्भ

  1. Url डीकोड के लिए ...

विशेष वर्णों (जैसे Google के रीडायरेक्ट) वाले विशेष URL के बारे में कैसे: जैसे: google.com/…
वाक्य

@REACHUS रीडायरेक्ट दिए गए URL के क्वेरी स्ट्रिंग में एन्कोडेड है।
एलेक्स चैंबरलेन

@REACHUS कोई चिंता नहीं है - आप शायद 2 पर्ल स्टेटमेंट को जोड़ सकते हैं।
एलेक्स चेम्बरलेन

20

और भी आसान तरीका है

curl -w "%{url_effective}\n" -I -L -s -S $URL -o /dev/null

यह प्रिंट होगा

http://raspberrypi.stackexchange.com/questions/1508/how-do-i-access-the-distributions-name-on-the-command-line/1521

URL के लिए

http://raspberrypi.stackexchange.com/a/1521/86

3
हालांकि आप अधिक समय और बैंडविड्थ का उपयोग करते हैं, क्योंकि आप दूसरे पेज को भी डाउनलोड कर रहे हैं।
दोपहर

1
@unhammer आप सही हैं, केवल मेरे अनुरोधों को करने के लिए मेरे उत्तर को अपडेट किया है।
इस्माइल

7

कर्ल को रीडायरेक्ट का पालन करने और पूरा होने के बाद चर प्रिंट करने के लिए कॉन्फ़िगर किया जा सकता है। तो आप जो पूछते हैं वह निम्नलिखित कमांड से प्राप्त किया जा सकता है:

curl -Ls -w %{url_effective} -o /dev/null https://google.com

मैन पेज उस तरह के आवश्यक मापदंडों की व्याख्या करता है:

-L, --location          Follow redirects (H)
-s, --silent            Silent mode (don't output anything)
-w, --write-out FORMAT  Use output FORMAT after completion
-o, --output FILE       Write to FILE instead of stdout

4

या यह कोशिश करो

curl -s -o /dev/null -I -w "HTTP_CODE: %{http_code}\nREDIRECT_URL: %{redirect_url}\n" http://raspberrypi.stackexchange.com/a/1521/86

कैसे विशेष वर्णों (जैसे Google के पुनर्निर्देश) वाले विशेष URL के बारे में, जैसे: google.com/…
वाक्यविन्यास

बस url को सिंगल कोट्स में रखें, ताकि आपका शेल लिंक में मौजूद विशेष वर्णों को अनदेखा कर दे। लेकिन आपके द्वारा बताए गए लिंक को किसी अन्य uri पर पुनर्निर्देशित नहीं किया गया है, प्रतिक्रिया की स्थिति कोड 200 है और 3xx नहीं है। आप जिस यूआरआई की तलाश करते हैं, वह यूआरआई में क्रमशः प्रतिक्रिया की सामग्री में छिपा होता है। आगे की परीक्षा के लिए आप के साथ प्रतिक्रिया के शीर्षलेख और प्रतिक्रिया curl -s -I 'http://yoururl'की सामग्री का अध्ययन कर सकते हैं curl -s 'http://yoururl'(आप देखेंगे कि Google पुनर्निर्देशन के लिए एक सरल जावास्क्रिप्ट का उपयोग करता है)।
user1146332

0

पैरामीटर -L (--location)और -I (--head)अभी भी स्थान-url के लिए अनावश्यक HEAD-request कर रहे हैं।

यदि आप सुनिश्चित हैं कि आपके पास एक से अधिक रीडायरेक्ट नहीं होंगे, तो बेहतर होगा कि फॉलो लोकेशन को डिसेबल करें और कर्ल-वैरिएबल% {redirect_url} का उपयोग करें।

यह कोड निर्दिष्ट URL में केवल एक हीड-अनुरोध करता है और स्थान-हेडर से पुनर्निर्देशन लेता है:

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://goo.gl/QeJeQ4"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.