Como faço para postar algo usando o cURL que começa com '@'?

2

O comando

curl http://localhost/ --data @hello

tentará ler o arquivo hello . Como faço para escapar do símbolo @ ?

    
por Ztyx 31.03.2015 / 17:56

2 respostas

3

Sem tentar descobrir mais sobre os aspectos internos do curl, sugiro que você apenas insira:

printf @hello | curl http://localhost/ --data @-

Como @ ulrich-schwarz sugeriu em um comentário, você também pode usar --data @<(echo @hello) se for mais conveniente (nem todas as conchas suporte esta sintaxe).

Olhando o código-fonte para o curl-7.41.0, não vejo como escapar de um sinal @ para impedir a interpretação como um nome de arquivo:

if('@' == is_file) {
  /* a '@' letter, it means that a file name or - (stdin) follows */

  if(curlx_strequal("-", p)) {
    file = stdin;
    set_binmode(stdin);
  }
  else {
    file = fopen(p, "rb");
    if(!file)
      warnf(config,
            "Couldn't read data from file \"%s\", this makes "
            "an empty POST.\n", nextarg);
  }

  /* ... */
}

Então, infelizmente, parece que estamos presos à solução de tubulação acima.

    
por 31.03.2015 / 18:05
0

Os dados são enviados com o tipo de conteúdo application/x-www-form-urlencoded . Em princípio, %40 deve ser decodificado para @ , então o seguinte comando deve enviar dados equivalentes:

curl http://localhost/ --data %40hello

No entanto, isso pode ou não funcionar dependendo se o aplicativo do lado do servidor realmente executa a decodificação de URL. Se ele espera dados não codificados, o que é bastante comum quando o aplicativo não espera que os dados contenham nenhum caractere especial, o aplicativo pode interpretar isso como %40hello .

Se o aplicativo não decodificar, envie os dados para enrolar .

    
por 01.04.2015 / 01:39

Tags