linux-curl はファイルからファイル属性を読み込みます。

linux-curl はファイルからファイル属性を読み込みます。

だから私はこのカールコマンドを持っています。しかし、APIキーをapi.txtというファイルに保存し、値を持つcurlコマンドにロードしたいと思います。

api.txt ファイルには以下が含まれます。

'X-Api:<API-KEY>'

このコマンドは機能します。

curl -H 'X-Api:<API-KEY>' -T file.zip "https://URL"

試験を終えた:

curl -H “Content-Type: text/plain” -d “api.txt” -T file.zip "https://URL"

エラーが発生しました:

  "errors" : [ {
    "status" : 401,
    "message" : "Unauthorized"
  } ]
}%      

質問:

  1. 実際のapiキーまたはapi.txtの予想行をロードしてカールコマンドで解析するにはどうすればよいですか?
  2. これはできますか?それとももっと良い方法ですか?

答え1

curl -H "$(cat api.txt)" -T file.zip "https://URL"

または、入力ファイルからすべてのパーセント記号と一重引用符を削除します。

curl -H "$(tr -d "'%" api.txt)" -T file.zip "https://URL"

または開始''%終了のみを削除します。

curl -H "$(sed -E "s/^'|'%$//g" api.txt)" -T file.zip "https://URL"

PS:私は最初にapi.txtで末尾の改行を避けるためにこれを2行で行う必要があると思いました。

API_KEY=$(cat api.txt)
curl -H "$API_KEY" -T file.zip "https://URL"

しかし、bashは入力ファイルの末尾で改行処理が改善されたようです。コマンドの置き換え- つまり、入力がない場合は削除されます。私はbash 5.1.16を使用しています。異なるシェルまたは異なるバージョンの bash を使用している場合は、2 行のバージョンを使用する必要があります。

答え2

curl正しい形式のファイルからヘッダーを読み取ることができます@。これは、分岐よりも効率的であり、潜在的にシェルを必要とせずに、より簡単で効率的で、catセキュリティ上の欠陥が少なくなるexec(3)実行呼び出しのためにシェルを削除できます。curlsystem(3)

curl -H '@api.txt' -T file.zip "https://..."

単純なBourneシェルには@引用は必要ありませんが、特定のシェルがこの役割に対して特定のタスクを実行するのを防ぎます。クールなシェル(例zsh:)を使用している場合は、引用規則をチェックして、どの文字が特別な意味を持っているかを確認するか、すべてを積極的に引用してください。

関連情報