Microsoft Forefront
Python を使用して を使用する Web サイトにログインし、内部 Web ページのコンテンツを取得して処理したいと考えています。
Python は初めてではありませんが、URL ライブラリを使用したことはありません。以下の投稿を確認しました。
- Python を使用して Web サイトにログインするにはどうすればよいですか?
- Python で Web サイトにログインするにはどうすればよいですか?
- Python を使用して Web ページにログインし、後で使用するために Cookie を取得する方法は?
- Python で Web サイトにログインする
などのモジュールもいくつか試しましたrequests
。ユーザー名/パスワードを入力するだけで十分ですか? または、何らかの方法で Cookie を使用して認証する必要がありますか? サンプルコードをいただければ幸いです。
これは私がこれまでに持っているコードです:
import requests
NAME = 'XXX'
PASSWORD = 'XXX'
URL = 'https://intra.xxx.se/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=3'
def main():
# Start a session so we can have persistant cookies
session = requests.session()
# This is the form data that the page sends when logging in
login_data = {
'username': NAME,
'password': PASSWORD,
'SubmitCreds': 'login',
}
# Authenticate
r = session.post(URL, data=login_data)
# Try accessing a page that requires you to be logged in
r = session.get('https://intra.xxx.se/?t=1-2')
print r
main()
しかし、上記のコードはsession.post
-line で次の例外を引き起こします:
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='intra.xxx.se', port=443): Max retries exceeded with url: /CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=3 (Caused by <class 'socket.error'>: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond)
更新: 間違ったユーザー名/パスワードを提供していることに気付きました。更新すると、上記のコードで HTTP-200 応答が返されますが、内部サイトにアクセスしようとすると HTTP 401 応答が返されます。なぜこうなった?上記のコードの何が問題になっていますか? どうにかしてクッキーを使用する必要がありますか?