質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

1回答

327閲覧

バッチファイル内のCURLコマンド実行で、HTTPステータスコードの戻り値をIF文で参照したい。

saya24

総合スコア244

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2024/05/11 03:41

編集2024/05/11 03:45

実現したいこと

クラウドシステム(SalesForce)の疎通確認コマンドを、導入ベンダ様から頂きました。

curl -k -s -I -o nul -w %%{http_code} https://XXXXXXXXXXX.XXX.salesforce.com

自分の従業員端末(Windows10 Pro /22H2) のコマンドプロンプトで上記を実行すると、
200 の3桁HTTPステータスコードが 実行ぎょうの下に現れることを確認できています。

バッチファイル内で上記コマンドを実行し、HTTPステータスコードの戻り値次第で メール配信するようなことを対応予定です。

発生している問題・分からないこと

バッチファイル内で上記実行から得られるHTTPステータスコードの戻り値の参照方法(変数への格納方法)が分からないです。

現在以下バッチファイルの状況です。画面に 200 の文字を表示されることまでは確認できていますが
IF文内に入ってこない・2回目のPAUSEまでたどり着かないことを確認しました。
(戻り値の変数格納に失敗している模様)

該当のソースコード

curl -k -s -I -o nul -w %%{http_code} https://XXXXXXXXXXX.XXX.salesforce.com pause if %http_code% neq 200 ( echo あれ ) else ( echo あれんぱ ) pause exit

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

こちらの記事 の参考

CURLコマンドとバッチファイル作成のノウハウ両方がうすいながら、この記事の見よう見まねで、画面に200を返すことまでは できたのですが 肝心な変数格納・参照を達成できず困っています。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Windows 11、コマンドプロンプトで確認しました。

変数に格納する方法は、参考リンク先そのままです。
ただし、今回は確認するURLが1個なので、遅延環境変数でなくてもよいと思います。

for /f %%i in ('curl -k -s -I -o nul -w "%%{http_code}" https://XXXXXXXXXXX.XXX.salesforce.com') do set http_code=%%i pause if %http_code% neq 200 ( echo あれ ) else ( echo あれんぱ ) pause exit

(訂正)
最初のset http_code=は不要なので削除しました。

投稿2024/05/11 04:56

編集2024/05/11 05:07
hiroki-o

総合スコア938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saya24

2024/05/11 05:36 編集

お時間を頂戴しまして 誠にありがとうございます。 もし可能であればご教示ください、 参考にしていた記事を自分のケースに適用する上で悩んていたことですが、ファイルに出力される内容を1行づつ読み込む 意味合いでしょうか? バッチファイル内でのfor文が ループを意味していることを理解しました。 となると...%%{http_code} なるCURLコマンド内の引数は HTTPステータスコマンドを得たい、という予約語の指定を意味したものでしょうか??
saya24

2024/05/11 06:56

なるほどよく分かりました、今回もお世話になり ありがとうございました。
otn

2024/05/11 13:57

> 最初のset http_code=は不要なので削除しました。 curlがエラーで何も標準出力に出力しない場合は、ループ0回で http_code の値は元の値のままなので、一般論としては、forで設定する変数はunsetしておく(あるいはエラーを引き起こす値をセット)のが安全です。 コマンドプロンプトから実行していると内部で`setlocal`していない限り、バッチ内で設定した環境変数が残るので、何度も実行すると前回の値が残っているはずです。 コマンドプロンプトからの実行じゃなくて、Explorerでファイルをダブルクリックして実行しているなら大丈夫ですが。 まあ、curlの場合は、curl.exeが無くなるか壊れない限り、何か標準出力に出そうです。ネットワークエラーでも000と出ますね。どんなエラーでも何か出ると保証されていれば良いのですが。
hiroki-o

2024/05/11 14:12

おっしゃる通りです。補足説明ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問