[E 160329 11:32:22 base_handler:194] HTTP 599: SSL certificate problem: self signed certificate in certificate chain
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 187, in run_task
result = self._run_task(task, response)
File "C:\Python27\lib\site-packages\pyspider\libs\base_handler.py", line 166, in _run_task
response.raise_for_status()
File "C:\Python27\lib\site-packages\pyspider\libs\response.py", line 183, in raise_for_status
raise http_error
HTTPError: HTTP 599: SSL certificate problem: self signed certificate in certificate chain
网上有遇到相似错误的:
解压后是两个文件:ca-bundle.crt和curl.exe,也知道https的请求须要证书,也知道ca-bundle.crt就是这个证书,关键是不知道怎么让pyspider使用起来。
先验证一下,在pycharm里编写脚本:
import pycurl
#建立一个同libcurl中的CURL处理器相对应的Curl对象
c = pycurl.Curl()
c.setopt(pycurl.URL, 'https://mm.taobao.com/json/request_top_list.htm?page=1')
# 设置证书
# c.setopt(pycurl.CAINFO, 'C:\\Python27\\curl\\curl-ca-bundle.crt') #执行上述访问网址的操做 c.perform()
运行后输出错误:
Traceback (most recent call last):
File "F:/PycharmProjects/test/pycurlStudy.py", line 90, in <module>
c.perform()
pycurl.error: (
60, 'SSL certificate problem: self signed certificate in certificate chain')
能够看到错误信息是和上面的如出一辙的(错误码不同这个不重要,可能pyspider有二次封装),而后把上面的验证代码的注释去掉,也就是设置一下证书,再次运行,OK!
思路是对了,关键是不知道怎么让pyspider使用起证书ca-bundle.crt。
发现有一个标记能够用
validate_cert:
validate_cert
- For HTTPS requests, validate the server’s certificate? default: True
也就是这样使用
self.crawl(url, callback=self.index_page, validate_cert=False)
可是运行依然报错,提示validate_cert不存在该key,草泥马!
而后通篇搜索D:\Python27\Lib\site-packages\pyspider目录根本没有发现validate_cert,草泥马!
可是网上搜索能找到,就是在github上,也就是说最新的pyspider源码里是有validate_cert的,而后怀疑本身的pyspider安装的是不是最新版的,当天才安装的,应该不至于,因而
pip install --upgrade pyspide
r也提示已是最新版了。
那么只有一个可能了:
pyspider最新源码和最新文档里都有,可是可能还未更新到最新的安装包里。因而先git下来最新的pyspider源码,把
C:\Python27\Lib\site-packages\pyspider-0.3.10.dev0-py2.7.egg目录下的pyspider整个文件夹删除,用git下的源码里的pyspider总体复制过去,重启pyspider all,再次浏览器中运行,成功!