-
é comumente usado para representar entrada padrão e <
é comumente usado para
representa o redirecionamento de um arquivo. Eu acredito que essas sintaxes vêm desde cedo
cartuchos. Juntos, eles implicam em entrada padrão e envio / redirecionamento
em outro lugar. A sintaxe é quase natural.
Olhando para o histórico de revisões do cURL,
a sintaxe <
foi adicionada ao cURL em meados de 2000. A revisão que adicionou este
recurso está disponível como Git commit 5b7a5046e6
.
Do changelog,
Torsten Foertsch <torsten.foertsch at gmx.net> brought a set of fixes for
the rfc1867 form posts. He introduced 'name=<file' which brings a means to
suuply very large text chunks read from the given file name. It differs from
'name=@file' in the way that this latter thing is marked in the uploaded
contents as a file upload, while the first is just text (as in a input or
textarea field). Torsten also corrected a bug that would happen if you used
%s or similar in a -F file name.
Não há menção da inspiração ou origem desse recurso.
A sintaxe @-
estava presente em cURL na versão mais antiga da fonte I
poderia encontrar. Desde a primeira revisão no final de 1999,
/* postfield data */
if('@' == *nextarg) {
/* the data begins with a '@' letter, it means that a file name
or - (stdin) follows */
FILE *file;
nextarg++; /* pass the @ */
É difícil determinar se é específico de cURL. A sintaxe é comum e natural. O recurso cURL ao qual está associado é um recurso básico de ondulação. Ferramentas semelhantes a cURL provavelmente implementarão alguma forma, se for.
A pergunta original perguntada sobre
$ echo foo | curl -d 'sprunge=<-' http://sprunge.us
Aqui estava minha resposta:
Eu não acredito que seja uma característica da cURL.
$ # Terminal A
$ curl --version
curl 7.31.0 (x86_64-unknown-linux-gnu) libcurl/7.31.0 OpenSSL/1.0.1e zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
$
$ echo foo | curl -d 'sprunge=<-' localhost:2222
$ # Terminal B
$ nc -l 2222
POST / HTTP/1.1
User-Agent: curl/7.31.0
Host: localhost:2222
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
sprunge=<-
Não encontrei menção a esse recurso na documentação do cURL. Existe uma característica semelhante.
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. The contents of the file must already be URL-encoded. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with --data @foobar.