はじめに
コマンドライン(crul)でBasic認証を叩きたいときのメモ。
とくに、Authorization ヘッダで実行したいときに迷ったので自分用のメモです。
アジェンダ
- はじめに
- アジェンダ
- 前提情報
- 1. curlでBasic認証 - オプションで指定
- 2. curlでBasic認証 - URL埋め込み
- 3. curlでBasic認証 - Authorization ヘッダ指定
- 参考
- おわりに
前提情報
このメモ環境はMac環境です。
OS Versionなどで差異はないはずなので今回は記載を省きます。
また、crulする情報は以下として扱います。
URL : https://www.example.com/login
ID : hogehoge
PASS: fuga@)fuga
1. curlでBasic認証 - オプションで指定
ひとつめはcrulのオプションで指定する方法です。
IDとPASSを: (コロン)
で挟んで指定します。
コマンド: curl -u <ID>:<PASS> https://www.example.com/login
注意点
<ID>:<PASS>
のパスワードに特殊記号を含む場合、エラーになります。
その場合は、ダブルクオートやシングルクオートで囲ってあげましょう。
# エラーになる例 $ curl -u hogehoge:fuga@)fuga https://www.example.com/login -bash: syntax error near unexpected token `)' # エラーを回避する例 $ curl -u 'hogehoge:fuga@)fuga' https://www.example.com/login
2. curlでBasic認証 - URL埋め込み
crulのURLに埋め込む方法です。
コマンド: https://<ID>:<PASS>@www.example.com/login
コマンド:
注意点
<ID>:<PASS>
のパスワードに特殊記号を含む場合、エラーになります。
こちらも、シングルクオートなどで囲むとエラーを回避できます。
ただし、URLとしての正しさも保ちたいですよね。
その場合は、シングルクオートではなくURLエンコードしてやります。
今回はperlのワンライナーを使いますが、URLエンコードしてくれるWebサイトなんかでもかまいません。
# エラーになる例 $ curl -u hogehoge:fuga@)fuga https://www.example.com/login # エラーを回避する例 ## まずは、perlのワンライナーでエンコード文字列を得る $ echo "hogehoge:fuga@)fuga" | perl -nle 's/([^\w ])/"%".unpack("H2",$1)/eg; s/ /\+/g; print' hogehoge%3afuga%40%29fuga ## 上記の文字列をつかう $ curl -u hogehoge:hogehoge%3afuga%40%29fuga https://www.example.com/login
3. curlでBasic認証 - Authorization ヘッダ指定
最後は、Authorization ヘッダを指定する方法です。
curlでのAuthorizationヘッダは−H
オプションで指定します。
コマンド: curl https://www.example.com/login \ -H "Authorization:Basic <BASE64エンコードした<ID>:<PASS>>"
注意点
上記の<BASE64エンコードした<ID>:<PASS>>
の部分ですが、
BASE64エンコードを事前にコマンドなどで行ってから文字列を指定します。
# BASE64エンコード $ echo -n "hogehoge:fuga@)fuga" | base64 aG9nZWhvZ2U6ZnVnYUApZnVnYQ== # BASE64エンコードした文字列を指定 $ curl https://www.example.com/login \ -H "Authorization:Basic aG9nZWhvZ2U6ZnVnYUApZnVnYQ=="
参考
おわりに
コマンドだけでなく、プログラムから指定する場合なんかもこれでいけますね!