Curl: adicionar o tipo de conteúdo usando a variável de ambiente zsh não está funcionando

0

Eu tento usar o Curl para enviar alguns dados. Aqui está um exemplo mais simples que funciona:

curl -v -H "Content-type: text/html" 127.0.0.1:1111

Eu vejo a saída assim:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
Content-type: text/html

O tipo de conteúdo é definido lá na saída. Funciona. O que eu quero é inserir o tipo de conteúdo usando a variável de ambiente.

Eu escrevo isto:

HTML='-H "Content-Type: text/html"

Então no próximo comando eu escrevo isto:

curl -v $HTML 127.0.0.1:1111

Mas falhou. Eu tenho esta saída:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
  "Content-Type: text/html"

Curl não está fazendo um cabeçalho real, é apenas uma string solta. Tem citações em torno dele e é recuo como você pode ver acima. Isso é diferente de antes e, portanto, o comando não funciona. Ele é rejeitado pelo servidor como um tipo de conteúdo incorreto.

Eu tentei usar --header em vez de -H assim:

HTML='--header "Content-Type: text/html"'

Isso gera um erro confuso:

curl: option --header "Content-Type: text/html": is unknown
curl: try 'curl --help' or 'curl --manual' for more information

Estou confuso. Eu tenho visto outras mensagens aqui de pessoas que querem variáveis de ambiente dentro de dados de postagem, o que é um problema diferente.

Estou usando o zsh e o Curl no MAC OS X. Espero que meu exemplo seja simples o suficiente.

Obrigado pelo seu tempo e ajuda!

    
por FizzBuzz 11.11.2016 / 14:34

1 resposta

2

Esse comportamento é devido ao fato de que zsh não divide parâmetros em espaços em branco por padrão, então você realmente passa --header "Content-Type: text/html" para enrolar como um parâmetro, considerando que ele deve ser passado como dois (primeiro a opção '--header' 'e depois o valor correspondente).

Você pode aconselhar zsh a fazer uma divisão de palavras (que também usa a referência aninhada na conta, que é importante em seu exemplo) usando o sinalizador de expansão (z) :

HTML='--header "Content-Type: text/html"'
curl -v ${(z)HTML} 127.0.0.1:1111
    
por 13.11.2016 / 13:17