2017-04-18 280 views
0

使用python重定向到SAML的登录页面后,我可以通过各自的cookie正常发送登录数据吗?或者SAML不是那么简单吗?网络抓取登录

这是重定向的page我正尝试使用Python请求登录。

import requests 

User = ***** 
Pass = ***** 

payload = { 
    'UserName': User, 
    'Password': Pass 
} 

session = requests.session() 

moodle_url = "https://moodle.vle.monash.edu/login/index.php?authCAS=CAS" 
response = session.get(moodle_url) 
cookies = session.cookies.get_dict() 


SAML_url = response.url 
response = session.post(SAML_url, payload) 

print(response.url) 

这样做似乎没有能够登录我,像我仍然得到相同的url

我试图登录使用Chrome和捕捉使用Wireshark的包手动,继HTTP Stream,浏览器似乎在重定向后立即获取SimpleSAMLAuthToken cookie。我无法理解这一点,因为我没有看到任何包含我的登录ID和密码的POST。

从我的理解,应该有一些形式的数据POST-ing,我可以模仿使用Python请求进入,但在Wireshark中过滤“http”不会显示任何。

这是POST-ing问题还是我只是缺少一个或两个有效载荷参数?

我对python和web scraping都很陌生。任何调试技巧非常感谢!

回答

1

Wireshark是一种矫枉过正的行为......只需看看Google Chrome中的网络标签即可。在那里,你可以看到你发布的数据需要像这样的格式:

post_data = {'UserName': 'Monash\%s' User, 
      'Password': Password, 
      'AuthMethod':'FormsAuthentication'} 

也将是一个伟大的想法,如果你使用正确的用户代理。如果你不这样做,你可能会被检测为一个僵尸程序,Web服务器将拒绝你访问。

另一个秘诀:在每一个POST请求设置适当的标题(内容类型,接受....)

+0

谢谢你的提示! –