注意:这段代码在Ubuntu上运行得很好,但在mac上不行,我不想在本地更改mac/python设置,而是尝试对代码进行更改,这样它就可以在任何地方运行。。
import ssl
import httplib
httplib.HTTPConnection(server, port, timeout)
但它会抛出错误:
[Errno 1] _ssl.c:503: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
现在代码不再使用urllib.request而使用httplib
我想更改代码,以便将SSLv3作为默认协议,如下所示:
ssl.SSLContext(ssl.PROTOCOL_SSLv3)
我环顾四周,发现了一些链接,但没有任何工作!
注意:自python 2.7.9以来,HTTPSConnection构造函数允许将ssl
context
作为参数传递,在本例中应使用该参数。此答案早于此更改,因此仅适用于过时的python版本。
^{} 只需调用打开的套接字上的^{} 来初始化一个https连接,不幸的是,您不能在python2.7中指定任何参数(python3允许passing the ^{} )。
如果要指定协议版本,则需要对这两个版本中的一个进行monkey修补:
方法1:补丁
httplib.HTTPSConnection.connect
:这将更改使用
HTTPSConnection
建立的所有连接的协议版本。方法2:补丁
ssl.wrap_socket
:这将更改使用
wrap_socket
的所有代码的默认协议版本,因此也会影响其他库。编辑:
方法3:因为httplib实际上只访问来自
ssl
的wrap_socket
,所以也可以用提供wrap_socket
的类替换httplib.ssl
。使用functools.partial
可以使编写以下内容变得非常优雅:相关问题 更多 >
编程相关推荐