cURLでファイルを使わずにクッキーを有効化

cURLでクッキーを使って通信したい場合、読み書きするクッキーファイルのパスを設定する。しかし、クッキーファイルを使いたくない、あるいは残したくない場合は、どうすればいいか。

結論、つぎの設定だけで、クッキーファイルを使用せずにクッキーエンジンを有効にできる。(レスポンスヘッダに含まれるクッキーがリクエストヘッダに設定される)

curl -bCURLOPT_COOKIEFILEは、読み込むクッキーファイルのパスを指定するオプションである。空文字を指定することで、クッキーファイルを使わずにクッキーエンジンを有効にできる。

curl -cCURLOPT_COOKIEJARは、書き込むクッキーファイルのパスを指定するオプションである。これは指定しなくていい。


はじめはcurl -cCURLOPT_COOKIEJARに無効なファイルパスを指定する方法が思いついた。空文字である""を指定すると「WARNING: failed to save cookies in : Failed writing received data to disk/application」と表示されるが、クッキーエンジンは有効になった。警告が出ているから、良い方法ではなさそうだ。

curl -cCURLOPT_COOKIEJARにファイル名として-を指定すると、クッキーはファイルに書き込まれず、標準出力に書き込まれる。無効なファイルパスを指定するより、こっちのほうが良さそうだ。そもそもクッキーファイルを使いたくないなら、やはりcurl -bCURLOPT_COOKIEFILE""を指定するだけの方法が良さそうだ。


ところでcurl -cCURLOPT_COOKIEJAR/dev/nullを指定すると、大問題が起こり得る。クッキーファイルを保存できない警告は表示されるが、クッキーファイルを使わずにクッキーエンジンを有効にできる。しかし、root権限で実行した場合、スペシャルファイルである/dev/nullを通常ファイルに書き換えてしまう。そして「-bash: /dev/null: Permission denied」というエラーが発生し、システムがおかしくなる。解決するために、つぎの手順で/dev/nullを再作成しなければならない。

rm  /dev/null
mknod -m 666 /dev/null c 1 3