কার্ল পুনঃনির্দেশিত হওয়ার পরে চূড়ান্ত URL পান


118

অগ্রণীত কার্ল বা উইজেটের সাথে কোনও পৃষ্ঠা পুনর্নির্দেশের পরে আমার চূড়ান্ত URL টি পেতে হবে।

উদাহরণস্বরূপ http://google.com http://www.google.com এ পুনর্নির্দেশ করতে পারে ।

বিষয়বস্তুগুলি পাওয়া সহজ (উদা। curl --max-redirs 10 http://google.com -L) তবে আমি কেবল চূড়ান্ত ইউআরএলটিতে আগ্রহী (পূর্ববর্তী ক্ষেত্রে http://www.google.com )।

কেবল লিনাক্স অন্তর্নির্মিত সরঞ্জাম ব্যবহার করে এটি করার কোনও উপায় আছে কি? (কেবল কমান্ড লাইন)

উত্তর:


209

curlএর -wবিকল্প এবং সাব ভেরিয়েবলটি url_effectiveআপনি যা সন্ধান করছেন তা।

কিছুটা এইরকম

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

অধিক তথ্য

পুনর্নির্দেশগুলি অনুসরণ করুন
-সাইলেন্ট মোড। কিছু আউটপুট করবেন না
-o ফাইল stdout এর পরিবর্তে <ফাইল> এ আউটপুট লিখুন
-w ফর্ম্যাট সমাপ্তির পরে আউটপুট কী

আরও

আপনিও যুক্ত করতে চাইতে পারেন -I(এটি একটি বড় আকারের i), যা কমান্ডটি কোনও "বডি" ডাউনলোড করবে না, তবে এটি হেড পদ্ধতিও ব্যবহার করবে, যা প্রশ্নের অন্তর্ভুক্ত নয় এবং সার্ভারের কী করবে তা পরিবর্তন করার ঝুঁকি নেই। কখনও কখনও সার্ভারগুলি জিইটি-তে জরিমানা করার পরেও শিরোনামের কাছে ভাল সাড়া দেয় না।


4
আপনি ফাইলটি না চাইলে আপনার "-o / dev / null" ব্যবহার করতে সক্ষম হওয়া উচিত
গাভিন মোগান

4
এটি একটি দুর্দান্ত বিকল্প, আমি কখনই জানতাম না কার্ল তা করতে পারে! এটি আমাকে বিস্মিত করতে কখনই থামে না:-)
জোশ

4
এটি
কার্লের

4
@ ড্যানিয়েলস্টেনবার্গের আপনার প্রয়োজন -Iঅন্যথায় এটি আসলে ফাইলটি ডাউনলোড করবে।
স্টিভেন পেনি

4
কিছু ওয়েবসাইটের curl -A ...প্রত্যাশিত জায়গায় পুনর্নির্দেশের জন্য একটি স্পোফযুক্ত ব্যবহারকারী এজেন্টেরও প্রয়োজন ।
ইভান কোজিক

30

ধন্যবাদ, এটি আমাকে সাহায্য করেছিল। আমি কিছু উন্নতি করেছি এবং এটি একটি সহায়ক স্ক্রিপ্ট "ফাইনালুরল" এ মুড়িয়েছি:

#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
  • -o আউটপুট থেকে /dev/null
  • -I আসলে ডাউনলোড করবেন না, কেবল চূড়ান্ত URL টি আবিষ্কার করুন
  • -s নীরব মোড, কোনও প্রগতিবার নেই

এটি অন্যান্য স্ক্রিপ্ট থেকে কমান্ড কল করা সম্ভব করেছিল:

echo `finalurl http://someurl/`

4
এই ধারণাগুলি জন্য ধন্যবাদ। আমি এটি একটি ফাংশন হিসাবে আমার .bashrc ফাইলে টার্মিনাল ব্যবহারের জন্য পুনরায় লিখেছি এবং সেই ফাইলটিতে সংক্ষিপ্ত বিকল্পগুলির প্রয়োজন নেই, তাই আমি স্বতঃ-দস্তাবেজের জন্য দীর্ঘ নামগুলি ব্যবহার করেছি:finalurl() { curl --silent --location --head --output /dev/null --write-out '%{url_effective}' -- "$@"; }
gw0

7

অন্য বিকল্প হিসাবে:

$ curl -i http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 19 Jun 2010 04:15:10 GMT
Expires: Mon, 19 Jul 2010 04:15:10 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

তবে এটি প্রথমটির অতীত হয় না।


6

আপনি সাধারণত উইজেটের সাহায্যে এটি করতে পারেন। wget --content-disposition"url" অতিরিক্ত হিসাবে আপনি যুক্ত করলে আপনি -O /dev/nullআসলে ফাইলটি সংরক্ষণ করবেন না।

wget -O /dev/null --content-disposition example.com


-O /dev/nullকেবল থেকে প্রতিস্থাপন করুন -O-। আরও ভাল:wget -O- --content-disposition example.com
ম্যাক্সওয়েল লাইট

4
wget -O / dev / নাল - কনটেন্ট-ডিসপোশন উদাহরণ ডটকম এবং উইজেট -O- / dev / নাল - কনটেন্ট-ডিসপোশন উদাহরণ.কম পুনঃনির্দেশিত URL এর চেয়ে অনেক বেশি আউটপুট উত্পাদন করে। curl $ 1 -s -L -I -o / dev / null -w '% {url_effective।' আমার পক্ষে ভাল কাজ করে।
এরিক ক্লিন

5

ধন্যবাদ. আমি আপনার পরামর্শগুলি প্রয়োগ করেছি: কার্ল- i + গ্রেপ

curl -i http://google.com -L | egrep -A 10 '301 Moved Permanently|302 Found' | grep 'Location' | awk -F': ' '{print $2}' | tail -1

ওয়েবসাইটটি পুনর্নির্দেশ না করা হলে খালি ফিরে আসে, তবে এটি আমার পক্ষে যথেষ্ট ভাল কারণ এটি ক্রমাগত পুনঃনির্দেশগুলিতে কাজ করে।

বগি হতে পারে, তবে এক নজরে এটি ঠিক আছে।



2

পরামিতি -L (--location)এবং-I (--head) এখনও অবস্থান-url- এ অপ্রয়োজনীয় হেড-অনুরোধ করছে।

আপনি যদি নিশ্চিত হন যে আপনার একাধিক পুনর্নির্দেশ হবে না, তবে অনুসরণের অবস্থানটি অক্ষম করা এবং কার্ল-ভেরিয়েবল% {redirect_url use ব্যবহার করা ভাল}

এই কোডটি নির্দিষ্ট ইউআরএল-এ কেবল একটি হেড-অনুরোধ করে এবং অবস্থান-শিরোলেখ থেকে redirect_url নেয়:

curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "https://""goo.gl/QeJeQ4"

গতি পরীক্ষা

all_videos_link.txt - goo.gl + বিট.ly এর 50 টি লিঙ্ক যা ইউটিউবে পুনঃনির্দেশ করে

1. অনুসরণ অনুসরণ করুন

time while read -r line; do
    curl -kIsL -w "%{url_effective}\n" -o /dev/null  $line
done < all_videos_link.txt

ফলাফল:

real    1m40.832s
user    0m9.266s
sys     0m15.375s

২. অনুসরণ অনুসরণ ছাড়া অবস্থান

time while read -r line; do
    curl -kIs -w "%{redirect_url}\n" -o /dev/null  $line
done < all_videos_link.txt

ফলাফল:

real    0m51.037s
user    0m5.297s
sys     0m8.094s

বেশ অস্বাভাবিক মনে হচ্ছে যে আপনি আগেই জানতে পারতেন যে কেবল একটি পুনর্নির্দেশ হবে ...
সাম্ব

1

এটি কার্ল দিয়ে কীভাবে করবেন তা সম্পর্কে আমি নিশ্চিত নই, তবে libwww-perl GET ওরফে ইনস্টল করে।

$ GET -S -d -e http://google.com
GET http://google.com --> 301 Moved Permanently
GET http://www.google.com/ --> 302 Found
GET http://www.google.ca/ --> 200 OK
Cache-Control: private, max-age=0
Connection: close
Date: Sat, 19 Jun 2010 04:11:01 GMT
Server: gws
Content-Type: text/html; charset=ISO-8859-1
Expires: -1
Client-Date: Sat, 19 Jun 2010 04:11:01 GMT
Client-Peer: 74.125.155.105:80
Client-Response-Num: 1
Set-Cookie: PREF=ID=a1925ca9f8af11b9:TM=1276920661:LM=1276920661:S=ULFrHqOiFDDzDVFB; expires=Mon, 18-Jun-2012 04:11:01 GMT; path=/; domain=.google.ca
Title: Google
X-XSS-Protection: 1; mode=block

0

আপনি এটি দিয়ে চেষ্টা করতে পারেন?

#!/bin/bash 
LOCATION=`curl -I 'http://your-domain.com/url/redirect?r=something&a=values-VALUES_FILES&e=zip' | perl -n -e '/^Location: (.*)$/ && print "$1\n"'` 
echo "$LOCATION"

দ্রষ্টব্য: আপনি কমান্ডটি কার্লটি সম্পাদন করার সময়- I http://your-domain.com এর মত কমান্ডটিতে একক উদ্ধৃতি ব্যবহার করতে হবে curl -I 'http://your-domain.com'


-4

আপনি গ্রেপ ব্যবহার করতে পারেন। বাজেট আপনাকে বলছে না কোথায় এটি পুনর্নির্দেশ করছে? শুধু গ্রেপ যে আউট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.