Web NTLM認証、Pythonとrequests 対 PowerShell

とある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環境のまんまで特に追加インストールもいらないしね。うれしい。