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