我想使用python登录使用Microsoft Forefront
的网站,并检索内部网页的内容以进行处理。
我不是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
- 行:
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响应。为什么会这样?上面的代码有什么问题?我应该以某种方式使用cookie吗?
答案 0 :(得分:0)
如果您有权访问TMG服务器,请登录它,启动TMG管理用户界面(我记不起它的名称),并查看来自您的IP地址的失败请求的日志。希望它能告诉你连接被拒绝的原因。
您似乎正在尝试通过Intranet连接到它。我看到它阻止连接的一种方法是,它是从它认为在其“内部”网络上的地址接收它们的。 (TMG有两个网络接口,因为它打算在两个网络之间使用:内部网络,其资源可以防御威胁;以及外部网络,可能来自威胁。)如果它在其外部网络接口上接收请求它似乎来自内部网络,它假定IP地址已被欺骗并阻止连接。但是,我不能确定是这种情况,因为我不知道这个TMG服务器的内部网络是什么设置的,也不知道你的机器的IP地址是否在这个内部网络上。