2017-04-18 279 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

謝謝你的提示! –