python 中的简单 post 请求线程中的 SSL 错误

SSL Error in thread with simple post request in python

我正在尝试做一个简单的 post 请求,我正在使用一个列表,因为我想使用线程同时发送我所有的 post 请求。这是 url 的示例:

            s = "https://emoncms.org/input/post.json?node="+str(test)+"&json={test_stack_overflow:0}&apikey="+str(apikey)
            list.append(threading.Thread(target=requests.post, args=([s, ])))

我大约 3 个月前使用过这段代码,它运行良好。 这周我想重新开始这个项目,但我意识到我遇到了一些错误,尤其是这个错误:

Exception in thread Thread-14:

Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
  self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
  self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 94, in post
  return request('post', url, data=data, json=json, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request
  return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 457, in request
  resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 569, in send
  r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 420, in send
  raise SSLError(e, request=request)
SSLError: <unprintable SSLError object>

我遇到了另一个错误,ConnectionError,但我认为这是由于网络或因为网站无法跟踪它 activity 或已关闭。如果你愿意,我给你留下回溯:

ConnectionError: ('Connection aborted.', error(101, 'Network is unreachable'))

这段代码只是我项目的一部分,代码每分钟 运行 我不知道为什么,但这个问题 (SSLError) 一天可能只出现 10 次。我在不同的 Raspberry Pi 上得到了这个脚本 运行,有些有同样的问题但频率不同,有些则根本没有。

有什么想法吗?
提前致谢 !

像这样在请求方法中使用verify=False

import requests
url="https://emoncms.org/input/post.json?node="+str(test)+"&json={test_stack_overflow:0}&apikey="+str(apikey)
requests.post(url,verify=False)

如果你使用线程,那么它会像

list.append(threading.Thread(target=requests.post, args=(url,),kwargs={"verify":False})) #**kwargs should be passed seperately.

您收到此错误是因为 python 请求尝试验证 https 连接的证书,因此您必须通过传递 verify=False 来覆盖它,或者您也可以像这样在验证中提供证书 requests.get(url,verify="/path/to/certificate.ext")

我也怀疑这应该是一个获取请求,因为据我所知,查询参数不会出现在 post 请求中。因此,如果您使用 GET 方法,同样 verify 也适用。