python中具有简单post请求的线程中出现SSL错误
我试图做一个简单的post请求,我使用一个列表,因为我想使用线程同时发送所有post请求。以下是url的示例:python中具有简单post请求的线程中出现SSL错误,python,multithreading,ssl,ssl-certificate,Python,Multithreading,Ssl,Ssl Certificate,我试图做一个简单的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, a
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>
这个代码只是我项目的一部分,代码每分钟运行一次,我不知道为什么,但是这个问题(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
来覆盖它,或者您也可以像下面这样在verify中提供证书requests.get(url,verify=“/path/to/certificate.ext”)
我还怀疑这是否应该是get请求,因为据我所知,查询参数不会出现在post请求中。因此,如果您使用
GET
方法,相同的verify
也适用于那里。好的,谢谢,我会试试这个,我会告诉您它是否有效!我有一个语法错误,我正试图自己解决它,但我刚刚开始Python。希望你能看到这个问题!我想您可能会在verify=False处出错,我甚至没有在URL列表下尝试verify=False。尝试使用单个url,您可能会有一些想法。args=([url,verify=False,])
或args=(url,verify=False)
是错误的,我仍然得到了语法错误liste.append(threading.Thread(target=requests.post,args=(url,verify=False,))
如果我像你说的那样通过了kwargs,我只得到一个警告unsecureRequestWarning
,但我认为你可以修改回溯以避免出现大的回溯
list.append(threading.Thread(target=requests.post, args=(url,),kwargs={"verify":False})) #**kwargs should be passed seperately.