gpt4 book ai didi

python - 请求失败,出现 SSLError 'failed to allocate SSL context'

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:48 29 4
gpt4 key购买 nike

我正在尝试使用 requests 向 RESTful API 发出 POST 请求。我的代码非常简单:

import json
import requests
import subprocess

url = 'https://api.host.name?key=MY_API_KEY'
post_data = {'parameter': 'value'}
try:
requests.post(url, json = post_data, verify=False) # Fails Frequently ...
except requests.exceptions.SSLError:
post_data_str = json.dumps(post_data)
curl_cli = "curl -H \"Content-Type: application/json\" -H \"Accept: application/json\" -X POST -d '%s' %s" %(post_data_str, url)
output = subprocess.check_output(curl_cli , shell=True) # Works every time!

该代码有时可以运行,但最常见的情况是它会因错误而失败:

requests.exceptions.SSLError: HTTPSConnectionPool(host='api.host.name', port=443): Max retries exceeded with url: api.host.name (Caused by SSLError(SSLError('failed to allocate SSL context',),))

错误似乎是随机的,即有时我第一次运行代码时失败,有时在几次成功请求后失败。当我执行来自 Postman(向 REST API 发出请求的应用程序)的相同请求时,它总是成功。

我的 requests 版本是 2.18.4,我在 Ubuntu 16.04.3 LTS 上使用 Python 2.7.12

编辑:

我也试过 urllib2 得到了类似的结果。代码是:

import json
import urllib2

url = 'https://api.host.name?key=MY_API_KEY'
post_dict = {'parameter': 'value'}
post_data = json.dumps(post_dict)
clen = len(post_data)
req = urllib2.Request(url, post_data, {'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()

错误本质上是一样的:

 File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 429, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 447, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1241, in https_open
context=self._context)
File "/usr/lib/python2.7/urllib2.py", line 1167, in do_open
h = http_class(host, timeout=req.timeout, **http_conn_args)
File "/usr/lib/python2.7/httplib.py", line 1262, in __init__
context = ssl._create_default_https_context()
File "/usr/lib/python2.7/ssl.py", line 411, in create_default_context
context = SSLContext(PROTOCOL_SSLv23)
File "/usr/lib/python2.7/ssl.py", line 337, in __new__
self = _SSLContext.__new__(cls, protocol)
ssl.SSLError: ('failed to allocate SSL context',)

最佳答案

没有更多信息,这里是我可以提供的:

  1. 如果你不是,请尝试使用 python3,因为我听说有人从 2.7 开始遇到这样的问题(可能不是你的解决方案)
  2. 尝试实现 sleep 功能(导休眠眠)并为其设置超时以在请求之间等待,因为您可能在分配的时间内请求过多的 API 调用,系统可能会“禁止”您的机器访问 API。
  3. 验证您的 OpenSSL 库版本并在必要时进行更新。

希望这对您有所帮助!

关于python - 请求失败,出现 SSLError 'failed to allocate SSL context',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com