Help us understand the problem. What is going on with this article?

curlのオプション--data, --data-binary, --data-raw, --data-urlencodeの違い

More than 1 year has passed since last update.

--data, --data-binary, --data-raw, --data-urlencode はどれも似ているが、下記の点で微妙な違いがある。

  • @ファイル名でファイルの内容を送信するか
  • @ファイル名でファイルの中の改行文字を削除するか
  • データをURLエンコードするか
オプション @でファイル送信 @ファイル内の改行を削除 URLエンコード
-d, --data, --data-ascii ×
--data-raw × - ×
--data-binary × ×
--data-urlencode ×

-d, --data, --data-asciiは完全に同じ。
--data-raw@ファイル名の記法を解釈しない。それ以外は-d, --dataと同じ。
--data-binaryはローカルにあるバイナリファイルを@ファイル名で送りたい場合向け。
--data-urlencodeは以下の5種類の記法に対応しており、=@の扱いがやや特殊なので注意:

content
     contentをURLエンコードし、POSTデータとする。contentは = または @ を含んではならないことに注意。

=content
     contentをURLエンコードし、POSTデータとする。先頭の = 自体は取り除かれる。

name=content
      contentの部分をURLエンコードする。nameは自動的にURLエンコードされないので、自分でしておくことに注意。

@filename
     POSTするデータをファイルから読み込み、URLエンコードする。

name@filename
     ファイルからnameの値を読み込む。nameは自動的にURLエンコードされないので、自分でしておくことに注意。

改行文字の扱い

--data@a.txtでファイルを指定した場合、ファイル内の改行文字(CR, LF)を削除する。つまり

a.txt
a
b
c

というファイルを--data '@a.txt'で送信した場合、

abc

という3バイトが送信される。これが--data-urlencode '@a.txt'では

a%0Ab%0Ac%0A

となり、--data-binary '@a.txt'ではCR, LFをそのまま送る。

-F, --formの例

-F, --formmultipart/form-dataでのフォーム送信をエミュレートする。

# ファイルをアップロードする
curl -F "profile=@portrait.jpg" https://example.com/upload.cgi

# typeを指定してファイルをアップロードする
curl -F "web=@index.html;type=text/html" https://example.com/upload.cgi

# ファイル名を指定してファイルをアップロードする
curl -F "file=@localfile;filename=nameinpost" https://example.com/upload.cgi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした