Eu tenho esta seção do comando curl dentro do meu script de shell que causou um erro 500 de resposta do servidor. No entanto, esse código funciona quando executo o comando manualmente.
curl -qgsSkH "Content-Type: multipart/form-data" --no-progress-bar --header "Token: $authKey" -F "filename=@$compressedFileName" -F "options={\"application\":\"2\",\"timeout\":\"5000\"}" https://www.domain.com > results.txt
Alguém faz algum ideia do porque?
Editar: Fiz uma depuração manual e descobri que o problema é causado pela variável $authKey. Esta variável é obtida pelo seguinte código no meu script.
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
fi
done <auth.txt
Se eu redefinir essa variável usando algo como o seguinte, o script funcionará.
authKey="TheAuthenticationKey"
Mas por que isso está acontecendo? A parte anterior em que passo a string do arquivo quando a leio linha por linha já está passando o valor correto (verifiquei novamente repetindo a saída para um arquivo txt).
Editar Consegui me aprofundar um pouco mais. Quando tento repetir o valor do token em um arquivo e adicionar " ao início e ao final da string, obtive este resultado.
"X-FeApi-Token: IDR+jxU1kB5ZpXsRNAgqfjTxkjZ0L2atH+l0H/NeatWDAJs=
"
Não tenho certeza de como remover essa nova linha. Alguém pode aconselhar?
Responder1
O problema parece ser causado por uma nova linha ou retorno de carro e nova linha em $authKey, conforme fornecido por "FireEye AX"
Você pode remover retornos de carro e avanços de linha canalizando-ostr -d '\r\n'
por exemplo
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
authKey=$(printf "%s" "$authKey" | tr -d '\r\n')
fi
done <auth.txt
Não me lembro se $BASH_REMATCH será passado para um subshell... você poderia tentar em uma linha, talvez funcione:
authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')
Responder2
Suponho que o arquivo de dados fornecido tenha terminações de linha no estilo Windows (CR/LF) em vez de terminações de linha Unix/Linux (LF).
Esta correspondência de padrão alternativa excluirá qualquer possível CR final:
[[ $line =~ ^SOME-PATTERN:[[:space:]](([^\015]*) ]]
authKey="${BASH_REMATCH[1]}"