cURL < - 機能

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

したがって、出力はechoPOSTパラメータとしてcURLに渡されます。これはcURLの特定の機能ですか?

ベストアンサー1

-通常、標準入力を表すために使用され、<ファイルのリダイレクトを表すためによく使用されます。私はこれらの構文が初期のシェルから来たと信じています。これは、標準入力を受け取り、別の場所に送信またはリダイレクトすることを意味します。構文はほぼ自然です。

cURLを見る改訂履歴、この<構文は2000年半ばにcU​​RLに追加されました。この機能を追加したリビジョンはGitコミットとして使用できます5b7a5046e6

変更ログから

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.

この機能のインスピレーションや由来についての言及はありません。

この@-構文は、私が見つけることができるソースコードの最も初期のバージョンであるcURLにあります。 1999年末第1次改正以後、

/* postfield data */
if('@' == *nextarg) {
  /* the data begins with a '@' letter, it means that a file name
     or - (stdin) follows */
  FILE *file;
  nextarg++; /* pass the @ */

cURLに固有のものかどうかを言うのは難しいです。構文は一般的で自然です。これに関連するcURL機能はcURLの基本機能です。そうであれば、cURLに似たツールがそれを何らかの形で実装する可能性が高くなります。


元の質問は

$ echo foo | curl -d 'sprunge=<-' http://sprunge.us

私の答えは次のとおりです。

私はこれが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=<-

cURLドキュメントにこの機能への言及がありません。しかし、同様の機能があります。

文字@でデータを開始する場合、残りはデータを読み取るファイル名でなければなりません。または - カールを使用してstdinからデータを読み取る場合は、次のようにします。ファイルの内容はURLでエンコードする必要があります。複数のファイルを指定することもできます。したがって、--data @ foobarを使用して、「foobar」というファイルのデータ公開を実行できます。

おすすめ記事