cURLでファイルを使わずにクッキーを有効化
cURLでクッキーを使って通信したい場合、読み書きするクッキーファイルのパスを設定する。しかし、クッキーファイルを使いたくない、あるいは残したくない場合は、どうすればいいか。
結論、つぎの設定だけで、クッキーファイルを使用せずにクッキーエンジンを有効にできる。(レスポンスヘッダに含まれるクッキーがリクエストヘッダに設定される)
- コマンドラインツールの場合:
curl -b ""
- libcurlの場合:
CURLOPT_COOKIEFILE
に""
を設定
curl -b
やCURLOPT_COOKIEFILE
は、読み込むクッキーファイルのパスを指定するオプションである。空文字を指定することで、クッキーファイルを使わずにクッキーエンジンを有効にできる。
curl -c
やCURLOPT_COOKIEJAR
は、書き込むクッキーファイルのパスを指定するオプションである。これは指定しなくていい。
はじめはcurl -c
やCURLOPT_COOKIEJAR
に無効なファイルパスを指定する方法が思いついた。空文字である""
を指定すると「WARNING: failed to save cookies in : Failed writing received data to disk/application」と表示されるが、クッキーエンジンは有効になった。警告が出ているから、良い方法ではなさそうだ。
curl -c
やCURLOPT_COOKIEJAR
にファイル名として-
を指定すると、クッキーはファイルに書き込まれず、標準出力に書き込まれる。無効なファイルパスを指定するより、こっちのほうが良さそうだ。そもそもクッキーファイルを使いたくないなら、やはりcurl -b
やCURLOPT_COOKIEFILE
に""
を指定するだけの方法が良さそうだ。
ところでcurl -c
やCURLOPT_COOKIEJAR
に/dev/null
を指定すると、大問題が起こり得る。クッキーファイルを保存できない警告は表示されるが、クッキーファイルを使わずにクッキーエンジンを有効にできる。しかし、root権限で実行した場合、スペシャルファイルである/dev/null
を通常ファイルに書き換えてしまう。そして「-bash: /dev/null: Permission denied」というエラーが発生し、システムがおかしくなる。解決するために、つぎの手順で/dev/null
を再作成しなければならない。
rm /dev/null
mknod -m 666 /dev/null c 1 3