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

## 外部ファイルの準備

#### 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 <token> をヘッダーに追加。
　・他のヘッダーは 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. 一時ファイルのクリーンアップ
処理終了後に一時ファイルを削除して、環境をクリーンに保つ。



 ## 実行手順

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

 ```bash
 chmod +x script.sh
```
1. 成功例
```bash
./script.sh
# Output:
# Requesting Authorization Token...
# Authorization Token Retrieved Successfully.
# Sending API Request...
# API Request Successful. Response:
# { "result": "success", "data": { ... } }
```

2. トークン取得失敗
```bash
./script.sh
# Output:
# Requesting Authorization Token...
# Failed to retrieve access token. HTTP Code: 401
# Response:
# { "error": "invalid_client", "error_description": "Invalid client credentials" }
```

3. APIリクエスト失敗
```bash
./script.sh
# Output:
# Sending API Request...
# API request failed. HTTP Code: 400
# Response:
# { "error": "invalid_request", "message": "Missing required parameters." }
```

## 注意点

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