当前位置: 首页 > 知识库问答 >
问题:

http://http://http://http://http://EOF中的SSL版本违反了协议

田谦
2023-03-14

我正在向我使用httplib2拥有的REST服务发出HTTPS GET请求,但我们得到了错误:

[Errno 8] _ssl.c:504: EOF occurred in violation of protocol

所有其他客户端都运行良好(浏览器、Java客户端等...),只有一个小例外,PHP curl需要设置为使用SSL v3。

我已经搜索了周围,它似乎确实是一个关于SSL版本的错误,但我似乎找不到一种方法来改变它在http://www. ttplib2.除了改变源代码中的以下行之外,还有什么方法可以解决这个问题吗?

# We should be specifying SSL version 3 or TLS v1, but the ssl module
# doesn't expose the necessary knobs. So we need to go with the default
# of SSLv23.
return ssl.wrap_socket(sock, keyfile=key_file, certfile=cert_file,
                       cert_reqs=cert_reqs, ca_certs=ca_certs)

共有2个答案

钦侯林
2023-03-14

请参阅另一个指定解决方案的StackOverflow线程。指定TLS版本的方法将强制SSL版本为TLSv1,如用户favoretti在提供的链接中的响应中所述。

希望这能奏效

雍阳
2023-03-14

我为httplib2开发了以下解决方案:

import httplib2

# Start of the workaround for SSL3
# This is a monkey patch / module function overriding 
# to allow pages that only work with SSL3

# Build the appropriate socket wrapper for ssl
try:
    import ssl # python 2.6
    httplib2.ssl_SSLError = ssl.SSLError
    def _ssl_wrap_socket(sock, key_file, cert_file,
                         disable_validation, ca_certs):
        if disable_validation:
            cert_reqs = ssl.CERT_NONE
        else:
            cert_reqs = ssl.CERT_REQUIRED
        # Our fix for sites the only accepts SSL3
        try:
            # Trying SSLv3 first
            tempsock = ssl.wrap_socket(sock, keyfile=key_file, certfile=cert_file,
                                       cert_reqs=cert_reqs, ca_certs=ca_certs,
                                       ssl_version=ssl.PROTOCOL_SSLv3)
        except ssl.SSLError, e:
            tempsock = ssl.wrap_socket(sock, keyfile=key_file, certfile=cert_file,
                                       cert_reqs=cert_reqs, ca_certs=ca_certs,
                                       ssl_version=ssl.PROTOCOL_SSLv23)
        return tempsock
    httplib2._ssl_wrap_socket = _ssl_wrap_socket
except (AttributeError, ImportError):
    httplib2.ssl_SSLError = None
    def _ssl_wrap_socket(sock, key_file, cert_file,
                         disable_validation, ca_certs):
        if not disable_validation:
            raise httplib2.CertificateValidationUnsupported(
                    "SSL certificate validation is not supported without "
                    "the ssl module installed. To avoid this error, install "
                    "the ssl module, or explicity disable validation.")
        ssl_sock = socket.ssl(sock, key_file, cert_file)
        return httplib.FakeSocket(sock, ssl_sock)
    httplib2._ssl_wrap_socket = _ssl_wrap_socket

# End of the workaround for SSL3

if __name__ == "__main__":
    h1 = httplib2.Http()
    resp, content = h1.request("YOUR_SSL3_ONLY_LINK_HERE", "GET")
    print(content)

这个解决方案是基于urllib2的解决方案,在这个错误报告http://bugs.python.org/issue11220,

更新:介绍httplib2的解决方案。我没有注意到你在使用httplib2,我以为是urlib2。

 类似资料:
  • HTTP的特性 HTTP构建于TCP/IP协议之上,默认端口号是80 HTTP是无连接无状态的 HTTP报文 请求报文 HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样: <method> <request-URL> <version> <headers> <entity-body>

  • HTTP (HyperText Transfer Protocol, 超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是基于 TCP 的应用层协议,简单地说就是客户端和服务器进行通信的一种规则,它的模式非常简单,就是客户端发起请求,服务器响应请求。 HTTP 最早于 1991 年发布,是 0.9 版,不过目前该版本已不再用。HTTP 目前在使用的版本主要有: HTTP/1.0,于 1996

  • 一面中,如果有笔试,考HTTP协议的可能性较大。 前言 一面要讲的内容: HTTP协议的主要特点 HTTP报文的组成部分 HTTP方法 get 和 post的区别 HTTP状态码 什么是持久连接 什么是管线化 二面要讲的内容; 缓存 CSRF攻击 HTTP协议的主要特点 简单快速 灵活 无连接 无状态 通常我们要答出以上四个内容。如果实在记不住,一定要记得后面的两个:无连接、无状态。 我们分别来解

  • 提示 视频 PPT 下载 背景介绍 HTTP 协议是互联网上应用最为广泛的一种网络协议,越来越多的应用程序需要直接通过 HTTP 协议来访问网络资源。webclient 是 RT-Thread 上实现的一个 HTTP 客户端,用来提供高效且功能丰富的 HTTP 客户端编程工具包。 这个教程展示了如何利用 HTTP 协议获取天气,我们是使用 webclient 这个工具包实现的。 准备工作 开启 W

  • 问题内容: 我有以下代码: 我正在尝试查询(例如)。 我不断收到此错误: 什么会导致此错误,我该如何解决? 问题答案: 不知道出了什么问题,但是当我尝试使用库执行相同的操作时,它会起作用: 请注意,两者之间存在差异,我的代码简单得多,它不适用于Cookie,并且不会伪装Safari浏览器。 如果您需要将Cookie与一起使用,则可以在其中找到很好的支持。