背景: 对于我公司的任何内部网站,如果我不使用公司的网络,则需要使用VPN登录。要登录,我需要我的用户名和密码。 我要抓取的网页不仅需要我的用户名和密码,而且还需要其他登录权限。
问题陈述: 我已经具有查看此网页的权限(可以使用我的用户名和密码查看该网页),但是我在下面尝试的代码仍然返回错误:
POST_LOGIN_URL = 'https://login.com'
REQUEST_URL = 'https://webpageIneedtoscrape.com'
payload = {
'username': 'user',
'pass': 'password'
}
with requests.Session() as session:
post = session.post(POST_LOGIN_URL, data=payload)
r = session.get(REQUEST_URL)
print(r.text)
这给了我
SSLError: HTTPSConnectionPool(host='https://webpageIneedtoscrape.com', port=443): Max retries exceeded with url: (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
然后,我尝试仅使用以下代码刮取Intranet网站的主页:
import requests
from requests_ntlm import HttpNtlmAuth
r = requests.get("https://login.com\\username",auth=HttpNtlmAuth('username','password'))
它返回此错误:
ProxyError: HTTPSConnectionPool(host='login.com%5cusername', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))
我很困惑现在是否可以抓取Intranet。我在网上搜索,看到一些有关证书的答案,但我不知道它是什么。 我是Web废料的新手,我想知道这个问题是否可以自己解决,还是需要其他文件(例如证书)?
我也很感谢任何可以帮助我诊断问题的建议。
答案 0 :(得分:0)
尝试将其添加到您的请求中:
r = session.get(REQUEST_URL, verify = False)
如错误所示,您无法通过证书验证。或者,您可以尝试:
r = session.get('https://google.com', verify='/path/to/certfile')
ref-https://2.python-requests.org/en/master/user/advanced/#ssl-cert-verification