Rest 使用请求进行PUT时,SSLError(读取操作超时)代替超时

Rest 使用请求进行PUT时,SSLError(读取操作超时)代替超时,rest,python-2.7,python-requests,Rest,Python 2.7,Python Requests,我正在尝试使用requests包对一个设备执行各种REST请求。 它正在工作,但是在一些请求上,比如PUTs,我得到的是一个SSLError,而不是我指定的超时 我将代码设置为重试,最多重试5次,每次超时加倍(1,2,4,8,16,32),如果我将SSLError视为超时,那么它最终将通过。下面是一个示例,您可以看到SSLError以超时间隔的速度发生: 2013-12-10 19:41:13.208 22294 DEBUG client [-] PUT: Request for https:/

我正在尝试使用requests包对一个设备执行各种REST请求。 它正在工作,但是在一些请求上,比如PUTs,我得到的是一个SSLError,而不是我指定的超时

我将代码设置为重试,最多重试5次,每次超时加倍(1,2,4,8,16,32),如果我将SSLError视为超时,那么它最终将通过。下面是一个示例,您可以看到SSLError以超时间隔的速度发生:

2013-12-10 19:41:13.208 22294 DEBUG client [-] PUT: Request for https://192.168.200.20/api/v1/global/host-name headers {'content-type': 'application/json', 'Accept': 'application/json', 'X-auth-token': u'...omitted...'} payload {'host-name': 'TestHost'}
2013-12-10 19:41:13.209 22294 INFO requests.packages.urllib3.connectionpool [-] Starting new HTTPS connection (1): 192.168.200.20
2013-12-10 19:41:14.253 22294 ERROR client [-] EXCEPTION The read operation timed out  <<< SSL Error
2013-12-10 19:41:14.255 22294 INFO requests.packages.urllib3.connectionpool [-] Starting new HTTPS connection (1): 192.168.200.20
2013-12-10 19:41:16.301 22294 ERROR client [-] EXCEPTION The read operation timed out
2013-12-10 19:41:16.302 22294 INFO requests.packages.urllib3.connectionpool [-] Starting new HTTPS connection (1): 192.168.200.20
2013-12-10 19:41:20.346 22294 ERROR client [-] EXCEPTION The read operation timed out
2013-12-10 19:41:20.348 22294 INFO requests.packages.urllib3.connectionpool [-] Starting new HTTPS connection (1): 192.168.200.20
2013-12-10 19:41:25.845 22294 DEBUG requests.packages.urllib3.connectionpool [-] "PUT /api/v1/global/host-name HTTP/1.1" 204 0 _make_request /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py:289
2013-12-10 19:41:25.846 22294 DEBUG client [-] PUT: Completed [204]
如果我不处理SSL错误,那么它会被捕获为ConnectionError。知道我做错了什么吗


我已经准备好了这个黑客程序,但想知道为什么会出现SSL错误。

谢谢Lukasa!你的问题促使我调查这个版本。我安装了requests 2.1.0,现在我看到的是超时异常,而不是SSLError异常,这正是我希望看到的。

谢谢Lukasa!你的问题促使我调查这个版本。我安装了requests 2.1.0,现在看到的是超时异常,而不是SSLError异常,这正是我希望看到的。

进行了一些挖掘,试图找到异常。在urllib3/connectionpool.py中,它调用conn.request(),然后调用conn.getresponse(),并且getresponse()调用似乎是引发异常的调用。但是我还没有找到源代码。您使用的是什么版本的请求?对不起,我应该提到这一点。我使用的是requests 1.2.0和python 2.7.3(尽管我需要在某个时候尝试使用2.6和3.3)。实际上,POST和DELETE请求也会超时,但使用H/W进行通信的延迟是1-2秒,而PUT请求的延迟是4-8秒(另一个问题我需要调查).做了一些调查试图找出例外情况。在urllib3/connectionpool.py中,它调用conn.request(),然后调用conn.getresponse(),并且getresponse()调用似乎是引发异常的调用。但是我还没有找到源代码。您使用的是什么版本的请求?对不起,我应该提到这一点。我使用的是requests 1.2.0和python 2.7.3(尽管我需要在某个时候尝试使用2.6和3.3)。事实上,超时也发生在POST和DELETE请求上,但使用H/W时,延迟为1-2秒,而PUT请求为4-8秒(另一个问题我需要调查)。
url = ('https://%(host)s/api/v1/%(resource)s' %
       {'host': self.host, 'resource': resource})
...
response = self._request(method, url, try_num, timeout=timeout,
                         headers=headers, data=payload)
...
def _request(self, method, url, attempt, **kwargs):
    ...
    try:
        response = requests.request(method, url, verify=False, **kwargs)
    except Timeout:
        self.status = wexc.HTTPRequestTimeout.code
        LOG.debug(_("%(method)s: Request timeout" ...)
    except SSLError as se:
        LOG.error("EXCEPTION %s", se)
        self.status = wexc.HTTPRequestTimeout.code