簡體   English   中英

如何在Python中連接需要我登錄並具有自簽名證書的站點?

[英]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.

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