cURL - recurso

6
$ cat file | curl -F 'sprunge=<-' http://sprunge.us

Assim, a saída de echo é passada como um parâmetro POST para cURL. Esta é uma característica específica da cURL?

    
por Jürgen Paul 22.07.2013 / 06:17

2 respostas

5

- é 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.

    
por 22.07.2013 / 06:27
0

Quando você usa a opção -d para enrolar, está sugerindo um POST na página curl man.

-d/--data <data>
     (HTTP) Sends the specified data in a POST request to the HTTP server, 
     in the same way that a browser does  when  a user has filled in an 
     HTML form and presses the submit button. This will cause curl to pass 
     the data to the server using the content-type 
     application/x-www-form-urlencoded.  Compare to -F/--form.
    
por 22.07.2013 / 06:36