导航:首页 > 编程语言 > pythonsslimport

pythonsslimport

发布时间:2022-08-19 04:54:12

python发送https提示error1407742e:ssl routines:ssl23_get_server_hello:tlsv1 alert protocol version

这似乎是一个SSL的bug。搜到一个解决方案,把这段代码放到程序开头:

importssl
fromfunctoolsimportwraps
defsslwrap(func):
@wraps(func)
defbar(*args,**kw):
kw['ssl_version']=ssl.PROTOCOL_TLSv1
returnfunc(*args,**kw)
returnbar
ssl.wrap_socket=sslwrap(ssl.wrap_socket)

然后再用requests试试。

❷ python requests请求ssl 加密 提示[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:4024)')))

服务器环境中的加密套件不支持这种加密方式。建议您升级一下加密套件版本到最新重新配置SSL。

❸ 如何实现python接口,的https

今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。
原因是以下一段代码引起的:
?

12

import urllib2urllib2.urlopen('https://xxxx.com')

本来这段代码很简单的,就是请求一个https的连接,可是报以下错误:
?

1

urllib2.URLError:

第一反应是https证书问题产生的,如是以'python ssl' 为关键字google后,看到大家都在用'requests'这个python组件做http请求客户端,就像java里面的httpclient组件一样,如果安装完request包后,改成如下代码:
?

12

import requestsrequests.get('https://xxx.com')

还是报以下错误:
?

1

requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)

可以看出来,用requests和urllib2报的错误信息是一样,可见它们都是基于相同的底层api操作的,比如基于TLS的socket连接。到这里的时候我怀疑这个问题不是python代码写的有问题,可能是操作系统级别的设置错了。如下直接在shell客户端运行如下测试脚本:
?

1

wget
https://xxx.com

果然报如下错误:
?

12

OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)无法建立
SSL 连接。

到这里我怀疑是openssl安装有问题,更新到最新版本后还是一样,然后在浏览器里访问是可以的,所以应该不是openssl有问题。继续google.......,就发现有人也遇到过这种问题,说是连接SSL服务器时SSL的版本不对,如是用如下代码测试不同的SSL版本,看是不是这个问题:
?

12345

curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com

分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。说明这个https连接所在的服务器是基于SSLV3版本的。找到的问题,就很容易知道怎么改写python代码了。
?

123456789

class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https连接都用ssl.PROTOCOL_SSLV3去连接s.get('https://xxx.com')

urllib2实现:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())

可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。

❹ mac linux python3.5 import ssl问题

应该是在安装包里,就是tar解压出来的那个目录里

❺ 怎么解决使用python的requests获得网页时出现sslEOFError错误

❻ python3 代码怎样关闭url与ssl属性校验

importurllib.request
importssl

url="httpsurl"
header=headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11"
}

request=urllib.request.Request(url,headers=header)
context=ssl._create_unverified_context()#忽略ssl证书验证
res=urllib.request.urlopen(request,context=context)
print(res.read().decode("utf8"))

❼ 如何支持自定义安装的高版本openssl库

1. Python官网下载源码包(version 2.7.8)并解压

2. 通过configure配置Makefile参数
假定先前已在/home/slvher/tools/openssl-1.0.1j路径下成功安装好高版本openssl,那么,可以通过下面的环境变量来设置gcc的编译/链接参数:
export LDFLAGS="-lssl -lcrypto -Wl,-rpath=/home/slvher/tools/openssl-1.0.1j/lib/" export CPPFLAGS="-I/home/slvher/tools/openssl-1.0.1j/include"
然后运行configure工具:
./configure --prefix=/home/slvher/tools/Python-2.7.8
configure运行完后,会生成Makefile,check无误后,执行make && make install就能完成Python安装。
3. 验证Python支持的ssl版本
Python安装成功且其bin路径加入PATH环境变量后,可通过下面的命令来验证是否正确支持高版本的openssl库:

python -c "import ssl; print ssl.OPENSSL_VERSION"
例如我机器上的输出结果如下:
OpenSSL 1.0.1j 15 Oct 2014

阅读全文

与pythonsslimport相关的资料

热点内容
度人经pdf 浏览:898
怎么配置android远程服务器地址 浏览:956
java程序员看哪些书 浏览:939
什么app可以免费和外国人聊天 浏览:793
pdf手写笔 浏览:178
别永远伤在童年pdf 浏览:986
爱上北斗星男友在哪个app上看 浏览:419
主力散户派发源码 浏览:668
linux如何修复服务器时间 浏览:58
荣县优途网约车app叫什么 浏览:477
百姓网app截图是什么意思 浏览:225
php如何嵌入html 浏览:813
解压专家怎么传输 浏览:745
如何共享服务器的网络连接 浏览:134
程序员简易表白代码 浏览:168
什么是无线加密狗 浏览:64
国家反诈中心app为什么会弹出 浏览:69
cad压缩图打印 浏览:104
网页打开速度与服务器有什么关系 浏览:865
android开发技术文档 浏览:65