[英]Connect a Metro app to a Python SSL server with a self-signed certificate
[英]How, in Python, do I connect to a site that requires me to login and has a self-signed certificate?
我已經看到了點點滴滴,可以幫助我繼續前進,但是我試圖將所有東西綁在一起,但那時還不是。
簡而言之,我正在嘗試通過登錄連接到TiVo,因此我可以在設備上獲取錄音的xml文件。 我試圖找到在URL中包含用戶名和密碼的方法,但這似乎不起作用。 當我在Chrome中輸入URL時,我得到了一個用戶名和密碼的請求者:
我曾經在登錄ISP的路由器或防火牆時看到過這種情況。 我確定這是司空見慣的事情,但是我對HTTP請求的了解還不足以了解如何處理它。 我也知道這是一個問題,因為此頁面要我登錄,但是SSL證書是自簽名的。
通過身份驗證請求后,即可獲得所需的數據。 我看到有關忽略證書問題的問題 , 該問題涉及使用urllib2時處理認證檢查。 第一個選擇的答案對我沒有幫助,因為它說urllib2不檢查證書的真實性。 超過120個投票的答案可以進一步解決證書問題。
我也看到有關登錄的問題 ,也解決了部分問題。 我不知道該答案是否涉及使用需要幫助的相同登錄名。 我也看不到如何結合這兩個問題的答案,因為它們使用兩種不同的方式從URL檢索數據。
我還找到了使用wget的解決方案:
wget --no-check-certificate --http-user=tivo --http-password=your-MAK-here
-O nowplaying.xml "https://192.168.2.103/TiVoConnect?
Command=QueryContainer&Container=%2FNowPlaying&Recurse=Yes"
我在調試模式下嘗試了wget,看看它做了什么。 我希望以某種方式將用戶名和密碼僅嵌入URL中,但是現在我看到它們不是,並且在最初聯系之后,仍響應目標系統的驗證請求而繼續傳遞。
我需要能夠在Python中使用某種方法來處理我正在描述的登錄類型。 但是我也需要使用相同的方法來忽略證書是自簽名的。 我看到了每個解決方案,但都沒有解決。
那么如何處理這種類型的登錄? (與第二個問題的登錄問題相同)並且我如何同時忽略證書問題?
我已嘗試使用具有自簽名證書的本地Bitbucket實例進行以下操作。
import httplib
import ssl
from requests import Session
from bs4 import BeautifulSoup as bs
server = 'https://bitbucket.xxx.xxx'
#connection = httplib.HTTPSConnection(server, '443', timeout=60, context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))
with Session() as s:
site = s.get('%s/login' % server, timeout=60, verify=False)
bs_content = bs(site.content, "html.parser")
#token = bs_content.find("input", {"name":"csrf_token"})["value"]
login_data = {"username": "xxx", "password": "xxx"}
s.post("%s/login" % server, login_data)
home_page = s.get(server)
print(home_page.content)
參考: https : //linuxhint.com/logging_into_websites_python/
您也可以使用類似Robot Framework之類的東西-盡管對於您要實現的目標而言,這可能是過高的選擇。 https://robotframework.org/#introduction
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.