1

Microsoft ForefrontPython を使用して を使用する Web サイトにログインし、内部 Web ページのコンテンツを取得して処理したいと考えています。

Python は初めてではありませんが、URL ライブラリを使用したことはありません。以下の投稿を確認しました。

などのモジュールもいくつか試しました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 応答が返されます。なぜこうなった?上記のコードの何が問題になっていますか? どうにかしてクッキーを使用する必要がありますか?

4

1 に答える 1

0

TMG は、ブロックする接続の種類にうるさいことで有名です。次のステップは、TMG が接続試行をブロックしている理由を調べることです。

TMG サーバーにアクセスできる場合は、それにログインし、TMG 管理ユーザー インターフェイスを起動して (名前が思い出せません)、IP アドレスから送信された失敗した要求のログを確認します。うまくいけば、接続が拒否された理由がわかります。

イントラネット経由で接続しようとしているようです。接続をブロックするのを見た 1 つの方法は、「内部」ネットワーク上にあると見なされるアドレスから接続を受信した場合です。(TMG は 2 つのネットワーク間で使用されることを意図しているため、2 つのネットワーク インターフェイスを備えています。1 つは脅威からリソースを保護する内部ネットワーク、もう 1 つは脅威が発生する可能性のある外部ネットワークです)。内部ネットワークから送信されたように見える場合、IP アドレスがなりすましであると見なし、接続をブロックします。ただし、この TMG サーバーの内部ネットワークがどのように設定されているか、マシンの IP アドレスがこの内部ネットワーク上にあるかどうかがわからないため、これが事実であるかどうかはわかりません。

于 2013-02-22T10:26:35.020 に答える