আমি কীভাবে শেল স্ক্রিপ্টে কোনও সাইটের http স্থিতি (কেবল) পেতে পারি?


13

আমি অঙ্কিত কার্ল কাজ হবে। আমি একটি স্ক্রিপ্টে লিখেছি:

#!/bin/sh

function test {
    res=`curl -I $1 | grep HTTP/1.1 | awk {'print $2'}`
    if [ $res -ne 200 ]
    then
        echo "Error $res on $1"
    fi
}  

test mysite.com
test google.com

এখানে সমস্যা কোনও বিষয় নয় আমি কী করি তা নীচের স্ট্যান্ডআউটটি মুদ্রণ করা বন্ধ করে দিতে পারি না:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

আমি এই স্ক্রিপ্টটি চালানোর জন্য ক্রোনজব চাই এবং যদি এটি কোনও বার্তা লেখেন তবে প্রতিবার চালানোর সময় আমি একটি ইমেল পাই কারণ সাইটটি ঠিকঠাক হলেও, কিছুটা ক্রোন স্টাডাউটে মুদ্রিত হয়েছে।

স্টাডআউটে জাঙ্ক না পেয়ে স্ট্যাটাস কোডটি কীভাবে পাব? এই কোডটি আমাকে স্ট্যান্ডআউটের বোনাস জাঙ্ক বাদ দিয়ে কাজ করে।

উত্তর:


12
   -s/--silent
          Silent or quiet mode. Don't show progress meter 
          or error messages.  Makes Curl mute.

সুতরাং আপনার res মত দেখতে হবে

res=`curl -s -I $1 | grep HTTP/1.1 | awk {'print $2'}`

Error 301 on google.comউদাহরণস্বরূপ ফলাফল ।


ধন্যবাদ! এই আমাকে এত জ্বালাতন করে। (এবং তাদের ম্যান পৃষ্ঠায় "অগ্রগতি মিটার" এর অধীনে এটি উল্লেখ করা উচিত)

10

তুমি চাও

...
res=$( curl -w %{http_code} -s --output /dev/null $1)
...

এটি আপনাকে কেবলমাত্র আউটপুট হিসাবে এইচটিটিপিপিএটিএস কোড দেবে।


2

আমি চূড়ান্ত হোস্টে পুনঃনির্দেশিত হয়েছি এবং এটি থেকে প্রতিক্রিয়া পাব তা নিশ্চিত করার জন্য আমি এটি এর মতো করব:

res=($(curl -sLI "${1}" | grep '^HTTP/1' | tail -1))
((res[1] == 200)) || echo ${res[2]}

2

এটি আপনার শর্ত হিসাবে ব্যবহার করুন ...

res=`curl -s --head <URL> | head -n 1 | grep -c HTTP/1.1 200 OK`

if [ $res -eq 1 ]
then
MSG = " OKAY"
EXIT_CODE = 0
else
MSG = " NOT OKAY"
EXIT_CODE = 2
fi

1

উপরে কার্ল দ্বারা চিহ্নিত হিসাবে স্থানীয়ভাবে HTTP প্রতিক্রিয়া সরবরাহ করতে পারে:

#!/bin/bash
#example1.sh
function test {
  RESPONSE=$(curl -so /dev/null -w "%{http_code}\n" ${1})
  if [[ $RESPONSE != 200 ]]; then
    echo "Error ${RESPONSE} on ${1}"
  fi
}    
test mysite.com
test google.com

উদাহরণ 1 সহ -sআমরা অগ্রগতি নিরব করি এবং -o /dev/nullআমাদের প্রতিক্রিয়া ট্র্যাশ করতে পারি তবে -wএখানে আপনার মিত্র:

$ ./example1.sh 
Error 000 on mysite.com
Error 301 on google.com

ইউআরএল_ কার্যকর এবং পুনঃনির্দেশ_আরএল জিজ্ঞাসা করে এটিকে স্থানীয়ভাবে কার্লের মাধ্যমে আরও সহজ করা যায়:

#!/bin/bash
#example2.sh
function test {
  curl -so /dev/null -w "%{http_code}\t%{url_effective}\t%{redirect_url}\n" ${1}
}  
test mysite.com
test google.com

উদাহরণ 2 আমরা আমাদের প্রাথমিক HTTP প্রতিক্রিয়া দেখতে পাই, মূল অনুরোধিত ডোমেনগুলি এবং সার্ভারের সাথে প্রতিক্রিয়া জানায়:

$ ./example2.sh 
000 HTTP://mysite.com/  
301 HTTP://google.com/  http://www.google.com/

তবে আপনি যদি 301 বা 302 পুনর্নির্দেশের পরেও যদি শেষ পর্যন্ত 200 টি প্রতিক্রিয়া প্রতিষ্ঠা করতে চান: তবে আপনি পূর্বোক্ত 'redirect_url' টি ফেলে দিতে পারেন

#!/bin/bash
#example3.sh
function test {
  curl -sLo /dev/null -w "%{http_code}\t%{url_effective}\n" ${1}
}  
test mysite.com
test google.com

উদাহরণ 3 আমরা যুক্ত করব -Lযা কার্লকে পুনর্নির্দেশ (গুলি) তাড়াতে নির্দেশ দেয়:

$ ./example3.sh 
000 HTTP://mysite.com/
200 http://www.google.com/

U&L এ আপনাকে স্বাগতম। আপনার প্রথম বাক্যটিতে "উপরে উল্লিখিত হিসাবে বলা হয়েছে" যা বিভ্রান্তিকর কারণ আপনার উত্তরের অবস্থান ভোট এবং ব্যবহারকারীর সেটিংসের উপর নির্ভর করে। "যেহেতু @some_user উপরে উল্লিখিত" (কিছু some_userপ্রকৃত নাম হিসাবে) বা "অন্যরা যেমন নির্দেশ করেছে" কিছু লাইন ব্যবহার করা ভাল
অ্যানথন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.