Anaconda - Python 3.6
OpenSSL 1.0.2
操作系统:Windows 7
阶段1(已完成):使用selenium:启动,导航和提取各种数据元素,包括来自站点的表格。表中包含的提取的超链接是文档的直接链接。
阶段2:从表中提取提取的超链接我需要将文件下载到共享驱动器上的指定文件夹。
尝试:
import urllib.request
url = 'tts website/test.doc'
urllib.request.urlretrieve(url,'C:\Users\User\Desktop\')
我得到的错误是sslv3警报握手失败
打开网站后,我点击了锁定图标,然后点击了#34;安装证书"。我已将证书保存到我的"受信任的根证书颁发机构"在证书商店。
我可以通过运行以下代码在显示的58 CA证书中看到上述步骤中的证书名称(当我安装证书时):
import socket
import ssl
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_REQUIRED
context.load_default_certs()
ca_certs = context.get_ca_certs()
print('{} CA Certificates loaded: ' .format(len(ca_certs)))
for cert_dict in ca_certs:
print(cert_dict['subject'])
print()
我无法弄清楚如何保护与网站/服务器的SSL连接,以便从每个超链接下载文件?本网站使用单点登录(SSO),并在我第一次启动网站时自动登录。
我曾尝试使用server server.net 443连接到服务器,但似乎无法获得连接和检索文档的脚本权限。
我已直接连接到服务器并抽象出此处显示的证书详细信息:
HOST, PORT = server.net, 443
ctx = ssl.create_default_context()
s = ctx.wrap_socket(socket.socket(), server_hostname=HOST)
c.connect((HOST, PORT))
cert = s.getpeercert()
print(cert)
当我运行urlretrieve时,我仍然得到同样的错误:握手。在查看我的ca证书时,我看到其中列出了我的Windows登录名(用户名)的个人证书,这必须是它如何使用SSO自动登录。我如何获取所有这些信息,使用我的SSO连接到网站,并检索文件?
最新更新:
我发现pycurl很有前途,但是我觉得我需要一些帮助才能做一些调整才能让它发挥作用。
import pycurl
fp = open('Test.doc','wb')
curl = pycurl.Curl()
curl.setopt(pycurl.URL, url) # see url link to go to word doc
curl.setopt(pycurl.FOLLOWLOCATION, 1)
curl.setopt(pycurl.MAXREDIRS, 5)
curl.setopt(pycurl.CONNECTTIMEOUT,30)
curl.setopt(pycurl.TIMEOUT, 300)
try:
curl.setopt(pycurl.WRITEDATA, fp)
curl.perform()
except:
import traceback
traceback.print_exc(file=sys.stderr)
sys.stderr.flush()
curl.close()
fp.close()
此代码不会产生错误,但是创建的word doc包含显示网站登录页面的打印屏幕的错误。
主要问题:使用企业网络代理服务器后面的单点登录连接进行HTTPS连接。
我一直试图让这个用于验证cacert,但我现在收到此错误消息:
curl.setopt(pycurl.SSL_VERIFYPEER, 1)
curl.setopt(pycurl.SSL_VERIFYPEER, 2)
curl.setopt(pycurl.CAINFO, certifi.where())
但现在我收到了错误:51,CERT_TRUST_IS_UNTRUSTED_ROOT
如果导致错误,我如何添加代理?其次,我如何直接附加ca证书文件?