Python python 做 https 请求,报 “Can't connect to HTTPS URL because the SSL module is not available” 错误的解决方法。

优雅的测试媛 · 2021年06月03日 · 最后由 codeskyblue 回复于 2021年06月04日 · 7571 次阅读

在 jenkins 上执行接口自动化脚本时,会报 “Can't connect to HTTPS URL because the SSL module is not available” 的错误。
原因:通常我们的的接口是 https 协议的,python 执行 https 请求时,需要用到 SSL。而 python 不会自动使用系统的 SSL,而是用自己的,所以,我在 jenkins 的服务器上安装了 openssl,依然会报这个错。
查了许多资料,理出了原因,找到了解决方法。
python 有个 Setup 配置文件,在它的 socket module 配置项中默认指定了 SSL 的目录为 “/usr/local/ssl”,而实际上我把 openssl 安装在了 /usr/local/openssl-1.0.2r 目录下。 知道原因后,就容易解决了。
一、如果你还没安装 openssl,先做如下操作。

cd /usr/local/openssl-1.0.2r             #进入openssl目录      
./config --prefix=/usr/local/openssl-1.0.2r  --openssldir=/usr/local/openssl-1.0.2r
make
make install

二、修改 python 的 ssl 目录,重新编译安装 python(之前已经安装过 python3 了):
先修改 ssl 目录,进入到 “Python-X.X.X/Modules” (X.X.X 是你安装的 python 版本号),编辑 Setup 文件,找到如下配置:

把注释去掉(去掉前面的 #),修改 ssl 的默认路径:

_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl-1.0.2r                    #修改openssl目录
_ssl _ssl.c \
  -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
  -L$(SSL)/lib -lssl -lcrypto

重新编译安装 python3:

cd ~/Python-X.X.X      #进入python安装目录
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/openssl-1.0.2r/lib
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl-1.0.2r     #/usr/local/python3 是我python3的安装目录
make
make install

执行成功后,在 jenkins 上再次执行接口自动化 job,终于是蓝色的啦!问题解决!

在安装第三方库,设置镜像源为 https 的时候也会报这个错误,解决方法一样。

如果对你有帮助,点赞哦~~

共收到 5 条回复 时间 点赞

感谢分享

恒温 回复

😅 已接收恒温大神的感谢

弄个软连接是不是也可以。

ln -s /usr/local/openssl-1.0.2r /usr/local/ssl
codeskyblue 回复

我想到的也是这个,不确定行不行?我自己的工作中没有用到 sskl,所以没法试,期待楼主试一下

zhang 回复

我是没机会用 jenkins 了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册