0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(調査中)shell。curlコマンドでAuthorizationを取得。リクエストも送信

Posted at

外部ファイルの準備

1. 設定ファイル (config.env)

config.env
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
TOKEN_URL=https://example.com/token
API_URL=https://example.com/api

2. ヘッダー設定ファイル (headers.txt)

このファイルはリクエストヘッダーを記述します。
例: Authorization以外の任意のヘッダー

headers.txt
Content-Type: application/json
Custom-Header: CustomValue

3. ボディ設定ファイル (body.json)

リクエストボディはJSON形式で記述します。

body.json
{
  "key1": "value1",
  "key2": "value2"
}

script.sh
#!/bin/bash

# 設定ファイルを読み込む
source config.env

# ヘルパー関数:エラー表示と終了
function error_exit {
  echo "Error: $1" >&2
  exit 1
}

# 1. Authorizationを取得する
echo "Requesting Authorization Token..."
AUTH_RESPONSE=$(curl -s -w "%{http_code}" -o auth_response.json -X POST \
  -d "client_id=$CLIENT_ID" \
  -d "client_secret=$CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  "$TOKEN_URL")

# HTTPステータスコードを取得
HTTP_CODE=$(tail -n1 <<<"$AUTH_RESPONSE")

if [[ "$HTTP_CODE" -ne 200 ]]; then
  echo "Failed to retrieve access token. HTTP Code: $HTTP_CODE"
  echo "Response:"
  cat auth_response.json
  rm -f auth_response.json
  exit 1
fi

# トークンを抽出
AUTH_TOKEN=$(jq -r '.access_token' < auth_response.json)

if [[ -z "$AUTH_TOKEN" || "$AUTH_TOKEN" == "null" ]]; then
  error_exit "Authorization token not found in response."
fi

echo "Authorization Token Retrieved Successfully."

# 2. ヘッダーを読み込む
HEADERS=("-H" "Authorization: Bearer $AUTH_TOKEN")
while IFS= read -r header; do
  HEADERS+=("-H" "$header")
done < headers.txt

# 3. ボディを読み込む
if [[ ! -f body.json ]]; then
  error_exit "Request body file 'body.json' not found."
fi
BODY=$(cat body.json)

# 4. APIリクエストを送信する
echo "Sending API Request..."
RESPONSE=$(curl -s -w "%{http_code}" -o api_response.json -X POST "${HEADERS[@]}" -d "$BODY" "$API_URL")

# HTTPステータスコードを取得
HTTP_CODE=$(tail -n1 <<<"$RESPONSE")

if [[ "$HTTP_CODE" -ne 200 ]]; then
  echo "API request failed. HTTP Code: $HTTP_CODE"
  echo "Response:"
  cat api_response.json
  rm -f api_response.json
  exit 1
fi

# 5. レスポンスを表示する
echo "API Request Successful. Response:"
cat api_response.json

# 後片付け
rm -f auth_response.json api_response.json

詳細説明

1. Authorizationの取得

・curl を使って、client_id、client_secret を含むPOSTリクエストを送信し、アクセストークンを取得。
・jq を使用して、レスポンスから access_token を抽出します。
 ・jq がインストールされていない場合は、sed などで代用できます。

2. ヘッダーの読み込み

 ・Authorization: Bearer をヘッダーに追加。
 ・他のヘッダーは headers.txt に記載して管理。

3. リクエストボディの読み込み

 ・body.json に記述されたJSON形式のデータをそのままPOSTリクエストのボディとして使用。

4. リクエスト送信

 ・APIのエンドポイント (API_URL) に取得したアクセストークンとヘッダー、ボディを付けてリクエストを送信。

5. レスポンスの表示

・APIからのレスポンスを標準出力に表示。

エラーハンドリングのポイント

1. HTTPステータスコードのチェック

curl の -w "%{http_code}" オプションを使って、リクエストの成功/失敗を確認。

2. トークン取得 (TOKEN_URL) とAPIリクエスト (API_URL) 両方に適用。

HTTPステータスコードが 200 でない場合はエラーとして処理。

3. レスポンスの保存と確認

curl の -o オプションでレスポンスをファイルに保存し、詳細なデバッグが可能。

auth_response.json と api_response.json という一時ファイルを使用。

4. トークン抽出のエラーチェック

jq を使ってトークンを抽出し、空や null の場合はエラーとして終了。

5. ファイル存在チェック

必須ファイル(body.json など)が存在しない場合はエラーメッセージを表示。

6. エラー用ヘルパー関数

error_exit 関数でエラーメッセージを表示し、スクリプトを終了。

7. 一時ファイルのクリーンアップ

処理終了後に一時ファイルを削除して、環境をクリーンに保つ。

実行手順

スクリプトの実行権限を付与します:

chmod +x script.sh
  1. 成功例
./script.sh
# Output:
# Requesting Authorization Token...
# Authorization Token Retrieved Successfully.
# Sending API Request...
# API Request Successful. Response:
# { "result": "success", "data": { ... } }
  1. トークン取得失敗
./script.sh
# Output:
# Requesting Authorization Token...
# Failed to retrieve access token. HTTP Code: 401
# Response:
# { "error": "invalid_client", "error_description": "Invalid client credentials" }
  1. APIリクエスト失敗
./script.sh
# Output:
# Sending API Request...
# API request failed. HTTP Code: 400
# Response:
# { "error": "invalid_request", "message": "Missing required parameters." }

注意点

依存ツール: このスクリプトは jq コマンドを利用しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?