とあるIISのWebアプリでログインにNTLM認証を使っているサイトをスクレイピングしたかった。 まずは所望のページをgetしたいぞと。
Pythonとrequestsでやってみた。最終的にこんな感じ。
import requests from requests_negotiate_sspi import HttpNegotiateAuth session = requests.session() # ログインした後クッキーとかのため session.auth = HttpNegotiateAuth() # Windowsのカレントユーザで認証 res = session.get('どこかのURL')
ポイントは、requests-negotiate-sspi · PyPI これを使うとこで、Windowsのカレントユーザで認証してくれる。なんとスマートなコードではないか。(実はここにたどり着くまでに散々苦労したのだが...、結果よければ全てよし、ですね)
ここまでできたところで、ふと思った。どうせWindowsだけで使うモノなので、毒を食らわば皿まで郷に入っては郷に従え、ということで、PowerShellでやったらどうだろうか。結果こうなった。
$res = Invoke-WebRequest -Uri "どこかのURL" -SessionVariable session -UseDefaultCredentials
おおぅ、簡単にできるではないか。PowerShellならWindows環境のまんまで特に追加インストールもいらないしね。うれしい。