任意のURLから応答を取得する方法は?


23

プロジェクトのURLがUP / Workingであるかどうかを確認するために、シェルスクリプト作成するように求められました

私はインターネット上でいくつかのヒントを見つけようとしましたが、私が得たのはURLが存在するかどうかをチェックすることです。

私は最初に試しましたwget

wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^  /'
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

私の次の試みはでしたcurl

curl -ivs  https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html#
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

ただし、どちらも応答ではなくURLの存在を確認しています。


1
curl manをざっと見てみると、--failフラグを使用すると、問題に関するページを返すのではなく22の終了コードを返すことが示唆されているため、戻り値を返すのは「200 OK」のみです0の
ガイ

回答:


20

curl -Is http://www.yourURL.com | head -1このコマンドを試し200 OKてURL を確認できます。ステータスコードは、リクエストが成功し、URLが到達可能であることを意味します。

telnetコマンドを使用してURLの可用性をテストし、応答コードを取得することもできます

telnet www.yourURL.com 80

80はポート番号です。


共有してくれてありがとう。これも試してみましたが、これも存在のみをチェックしていると思います。$ sh q.sh確認するURL:google.com/akash google.com/akashは存在しますが、ブラウザー:: 404でエラーが発生しています。それはエラーです。
アカシ

@Akash:ブラウザからそのリンクにアクセスできますか?
ゆえに14

これがあなたの話のリンクである場合--www.google.com/akash--then NO--それは私にエラーを与える:: "404-not found"
Akash

ええ、そのURLが存在しない場合、次のようになります:)他に何を期待していますか?
ゆえに14

しかし、それは私に存在していることを示しています。以下はコードです:$ vi q.sh#!/ bin / ksh echo "give your url" read url curl -ls "&url" | head -1 if [$?-eq 0]、その後..私はこれを実行すると、他のエコーが$ SH q.shギブあなたのURL www.google.com/akashの存在:: Fiが「存在しない」が、それはELSEに行くべき「が存在し、」エコー
Akashさんを

5

次のことができます

#!/bin/bash

read -p "URL to check: " url
if curl --output /dev/null --silent --head --fail "$url"; then
  printf '%s\n' "$url exist"
else
  printf '%s\n' "$url does not exist"
fi

if文はかかわら必要はありませんが、私は、スクリプトの流れを示すために、ここではそれらを置きます。ここに画像の説明を入力してください


私はこれを試しましたが、期待した結果が得られません。
Akashさん

$ shのq.sh URLをチェックするには:www.google.com%sの\ nはwww.google.com存在しません
Akashさん

@Akash更新された回答を参照してください。スクリプトに拡張子を付けないでください。また、で実行し./checkURLます。それが役立つことを願って
バレンティンバジラミ14

Project-Purposeに必要です..そのように実行するためのアクセス権を持っていません.. :(
Akash 14

あなたは%s\n そこに何を置きますか?あなたのコメントで?プロジェクト目的?あなたが達成しようとしていることをより具体的にする必要があります。
バレンティンバジラミ14

1

次のことは私のために働いた....

status="$(curl -Is http://www.google.com | head -1)"
validate=( $status )
if [ ${validate[-2]} == "200" ]; then
  echo "OK"
else
  echo "NOT RESPONDING"
fi

@THUSHIが書いたものから試しました。


0

あなたの場合はpingURL、それはあなただけでなく、応答が得られます

ping -c 5 www.google.com

どこ-c5のタイムアウトが満了するまでカウントされます。

私がアドバイスされたことに照らしnmapて、システムにパッケージがインストールされていれば動作するかもしれません。curlより良いオプションになりますが、それでも以下を使用した例がありますnmap

nmap -p 80 -sT www.google.com


pingICMPメッセージを送信し、間違いなくポート80またはを使用しません443。また、一部のサーバーはping要求をブロックしますが、それでも試行は信頼できません。
バレンティンバジラミ14

ポートにもpingを実行できます。nmapを使用してWebサイトのポートにpingする例を送信します
ryekayo

nmapの-p 80 -sT www.google.comは、私は私のPCへのアクセスを得るとき、私はすぐに私の答えを編集しますポート80にpingを実行します
ryekayo

1
nmap繰り返しますが、多くの* nixシステムではデフォルトではないパッケージです。curl基本システムに同梱されているより一般的です。nmap標準の* nixツールで達成できる何かを達成するために、まだインストールする必要があります。
バレンティンバジラミ

1
情報をありがとう。私は私の答えを更新
ryekayo

0

ほとんどの場合、httpsではcurlは機能しません。「curl --version」で確認できる場合は、以下で使用できるオプションhttpsが表示されません。

wget --post-data '{"name":"Radha", "Car": "Jaquar"}' --header "Content-Type: application/json" --no-check-certificate https://yourrequiredURI


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.