linux-curl은 파일에서 파일 속성을 읽습니다.

linux-curl은 파일에서 파일 속성을 읽습니다.

그래서 저는 이 컬 명령을 가지고 있습니다. 하지만 API 키를 api.txt라는 파일에 저장하고 값이 있는 컬 명령에 로드하고 싶습니다.

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"

추신: 저는 처음에 api.txt에서 후행 줄 바꿈을 피하기 위해 이 작업을 두 줄로 수행해야 한다고 생각했습니다.

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

그러나 bash는 입력 파일 끝에서 개행 처리가 향상된 것 같습니다.명령 대체- 즉, 더 이상 입력이 없으면 삭제됩니다. 저는 bash 5.1.16을 사용하고 있습니다. 다른 쉘이나 다른 버전의 bash를 사용하는 경우 두 줄 버전을 사용해야 할 수도 있습니다.

답변2

curl올바른 형식의 파일에서 헤더 읽기를 지원합니다 @. 이는 분기보다 더 효율적이며 잠재적으로 셸이 필요 없이 cat더 간단하고 효율적이며 보안 결함이 덜 발생하는 exec(3)실행 호출을 위해 셸을 제거할 수 있습니다.curlsystem(3)

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

간단한 Bourne 쉘에는 @인용이 필요하지 않지만 특정 쉘이 이 역할에 대해 특정 작업을 수행하는 것을 방지하는 것입니다. 멋진 쉘(예 zsh: )을 사용하는 경우 인용 규칙을 확인하여 어떤 문자가 특별한 의미를 가지고 있는지 확인하거나 모든 것을 적극적으로 인용하십시오.

관련 정보