我写了一个非常小的python客户端来访问confluence restful api。我使用https协议连接汇合。我遇到了Connection reset by peer
错误。
这是完整的堆栈跟踪。
/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Traceback (most recent call last):
File "wpToConfluence.py", line 15, in <module>
main()
File "wpToConfluence.py", line 11, in main
headers={'content-type': 'application/json'})
File "/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/api.py", line 71, in get
return request('get', url, params=params, **kwargs)
File "/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/Users/rakesh.kumar/.virtualenvs/wpToConfluence.py/lib/python2.7/site-packages/requests/adapters.py", line 453, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(54, 'Connection reset by peer'))
这是我的客户代码:
import requests
def main():
auth = open('/tmp/confluence', 'r').readline().strip()
username = 'rakesh.kumar'
response = requests.get("https://<HOST-NAME>/rest/api/content/",
auth=(username, auth),
headers={'content-type': 'application/json'})
print response
if __name__ == "__main__":
main()
我在虚拟环境中运行此脚本,并在该环境中安装了以下软件包:
(wpToConfluence.py)➜ Python pip list
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
appnope (0.1.0)
backports.shutil-get-terminal-size (1.0.0)
decorator (4.0.10)
ipdb (0.10.1)
ipython (5.0.0)
ipython-genutils (0.1.0)
pathlib2 (2.1.0)
pexpect (4.2.0)
pickleshare (0.7.3)
pip (6.1.1)
prompt-toolkit (1.0.5)
ptyprocess (0.5.1)
Pygments (2.1.3)
requests (2.10.0)
setuptools (25.1.6)
simplegeneric (0.8.1)
six (1.10.0)
traitlets (4.2.2)
urllib3 (1.16)
wcwidth (0.1.7)
它确实抱怨python版本号,但我不确定如何更新我的Mac /虚拟环境python。
我试图使用curl命令和Postman,它们都适用于给定的参数。
答案 0 :(得分:23)
安装requests
库时,它会跳过SSL / Https连接所需的optional security packages('pyOpenSSL','ndg-httpsclient'和'pyasn1')。
您可以通过运行此命令来修复它
pip install "requests[security]"
或
pip install pyopenssl ndg-httpsclient pyasn1
答案 1 :(得分:1)
我尝试安装以上答案中提供的所有可选安全软件包。但是似乎没有任何效果。
一个重要的GOTCHA:检查您的网址端点是否主动阻止程序访问。
看看网站根目录中的robots.txt文件: http://myweburl.com/robots.txt。
如果包含的文本如下所示:用户代理:*不允许:/
该网站不喜欢并且想要抓取。这会给您同样的可怕错误54,对等方会重置连接。
这是快照:
https://www.aclibrary.org/robots.txt
用户代理:discobot不允许:/用户代理:AddThis.com不允许:/用户代理:Yandex不允许:/用户代理:Baiduspider不允许:/用户代理:Baiduspider-video不允许:/用户代理:Baiduspider-image不允许:/用户代理:SemrushBot不允许:/用户代理:SemrushBot-SA不允许:/用户代理:W3C-checklink抓取延迟:0用户代理:Twitterbot不允许:用户代理:*抓取-delay:10不允许:/er.php不允许:/err.php不允许:/go.php不允许:/friendly.php不允许:/ld.php不允许:/srch.php网站地图:https://aclibrary.org/sitemap.xml
答案 2 :(得分:0)
对于我来说,安装可选的安全软件包不起作用,以防万一有人出现相同的错误消息,请检查您尝试使用的网址是否正确。
例如,如果服务器期望在其他端口上进行连接,则可能会发现此错误。
答案 3 :(得分:0)
我遇到了同样的问题,但安装可选的安全包对我也不起作用。
我不得不将 requests
版本从 2.25.1
降级到 2.21.0