簡體   English   中英

具有Webidentity和轉發功能的python登錄門戶

[英]python login portal with webidentity and forwarding

使用Python請求,我正在嘗試登錄門戶網站URL,該門戶網站URL會轉發到另一個URL。 我已經閱讀了有關此主題的幾篇文章,甚至嘗試過:

1)使用請求獲取和檢索csrf令牌創建會話

2)使用上一步中的csrf令牌,並在門戶網站URL上進行張貼,其中有效負載為用戶名/密碼/和csrf令牌(使用開發人員工具時傳遞的信息相同)。

3)在第2步之后,我仍然獲得以下p.text作為輸入用戶名和密碼,並且沒有顯示登錄后的頁面並表明它正在尋找我登錄

s = requests.Session()
g = s.get("myPortalURL")
resp = g.text
for item in resp.split("\n"):
    if "csrf_token" in item:
        print (item)
        csrfToken = item.strip().split("value=")[1].replace("\"", "").replace("/>","")

data = {'Username': self.pythonDataDict["portalUsername"], 'Password': self.pythonDataDict["portalPassword"],
           'csrf_token': csrfToken}

print ("payload= ", data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
p = s.post("myPortalURL", headers=headers, data=data)
soup = BeautifulSoup(p.text)
print (p.text)

這是您的代碼可能存在的一些問題:

  1. 根據個人經驗; 登錄頁面的URL應該不同於主頁的URL。

  2. data缺少data所有必需的數據都需要以表格形式輸入,

  3. 您可能需要包括其他請求標頭

  4. 根據令牌的性質,獲取csrf_token代碼可能傾向於返回不正確的數據(盡管所有令牌都可能有所不同,因此可能不會)

另外請注意,在使用會話時,通常使用with語句更為慣用,例如

with requests.Session() as s:
    initial_response = s.get("login_url")
    # def createForm()...
    main_response = s.get("target_url", data = data, headers = headers)
    # rest of code...

如果可以的話,如果您可以包括要訪問的頁面的URL,那也將非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM