windows10下使用pyopenssl, pycurl 访问https网站(python)
python初学者, 想做一个爬虫, 开始时是爬http的网站, 后来发现那个网站有点恶心, 就改为爬他的https网站版本, 所以就学习下怎么用python访问https网站
刚开始时, 以为urllib可以访问https网站, 后来经过实践和资料的查询, 发现这是不支持的. 资料推荐我使用pycurl库.
本以为就只需下载pycurl (下载链接看文章最下面) 就好了, 结果发现win10下pycurl-7.21.5.win32-py2.7.exe版本竟然有问题, 体现在perform()不会返回直到超时, 后来重新下载pycurl-7.19.5.1.win32-py2.7.exe就可以使用了, 但是此时发现只能访问http网站, 如果访问https网站会提示如下错误:
c.perform() pycurl.error: (35, 'schannel: next InitializeSecurityContext failed: Unknown error (0x80092012)
后来上pycurl官网看帮助文档(看下面 "pucurl安装官方文档" 链接) , 才大概感觉到需要安装pyopenssl库才可以让pycurl访问https网站 ( 关于这点, 网上没有类似说法, 都说pycurl可以直接访问, 但是在我系统win10x64上, 的确安装pyopenssl才可以访问https网站).
所以就用pip工具下载pyopenssl库, 使用命令如下: pip install pyopenssl.
PS: 关于pip的使用请看
Python: 删除已安装的模块或包 及 python工具pip的安装和使用
http://blog.csdn.net/guyue35/article/details/51337513
安装完成pyopenssl和pycurl库后, 的确可以访问https网站了. 使用如下简单代码
#coding:utf-8 import pycurl url = 'https://www.douban.com/' c = pycurl.Curl() c.setopt(c.URL, url) # Follow redirect. c.setopt(c.FOLLOWLOCATION, True) c.perform() c.close() exit()
并且在使用中发现, pycurl库访问https网站时候, 不能被HTTP Debugger Pro工具所捕抓到, 而访问http网站就可以捕抓到.
且pycurl使用时候有时候会出现如下错误, 但是再一次运行, 就不报错, 且成功访问https网站. 原因不解.
c.perform() pycurl.error: (35, 'schannel: next InitializeSecurityContext failed: Unknown error (0x80092012)
python库的下载地址
PyPI - the Python Package Index : Python Package Index
https://pypi.python.org/pypi
python库中搜索pycurl的结果
Index of Packages Matching 'pycurl' : Python Package Index
https://pypi.python.org/pypi?%3Aaction=search&term=PycURL&submit=search
我机子win10x64下可用的pycurl版本
pycurl 7.19.5.1 : Python Package Index
https://pypi.python.org/pypi/pycurl/7.19.5.1
pucurl官网
PycURL Home Page
http://pycurl.io/
pucurl安装官方文档
PycURL – A Python Interface To The cURL library — PycURL 7.43.0 documentation
http://pycurl.io/docs/latest/index.html#installation
找到的其他资料
Windows10下安装OpenSSL_Windows_第七城市
http://www.th7.cn/system/win/201603/154741.shtml