[英]python requests: (SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)'))
[英]Python requests ssl [Errno 1] _ssl.c:1428: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
我正在使用請求模塊創建一個python應用程序。 我最近添加了多處理以加快它的速度,但我開始得到一些奇怪的錯誤,如[Errno 1] _ssl.c:1428: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
或[Errno 1] _ssl.c:1428: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac
。 代碼如下所示:
def hometables_one(conn, request, s, hostname, payload, company):
date1 = request.query.get('date1', '')
date2 = request.query.get('date2', '')
prijmyCelk = 0;
vydajeCelk = 0;
neuhrPrijCelk = 0;
neuhrVydCelk = 0;
dph = 0;
dbNazev = company['dbNazev'];
nazev = company['nazev'];
if date1 and date2:
try:
r = s.get("%s/c/%s/faktura-vydana/(duzpPuv between %s %s)/$sum.json" % (hostname, dbNazev, date1[0], date2[0]), params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
#response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
#return response
conn.send({ "success": False, "errors": { "reason": str(err)}})
conn.close()
return None
else:
try:
r = s.get("%s/c/%s/faktura-vydana/$sum.json" % (hostname, dbNazev), params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
#response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
#return response
conn.send({ "success": False, "errors": { "reason": str(err)}})
conn.close()
return None
obj_vydana = r.json()
data_vydana = obj_vydana['winstrom']['sum']['sumDoklUcetni']['values']
prijmyCelk = float(data_vydana['sumDoklCelkem']['value'])
neuhrVydCelk = float(data_vydana['sumDoklZbyvaUh']['value'])
dph_vydane = float(data_vydana['sumDoklDphCelk']['value'])
if date1 and date2:
try:
r = s.get("%s/c/%s/faktura-prijata/(duzpPuv between %s %s)/$sum.json" % (hostname, dbNazev, date1[0], date2[0]), params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
#response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
#return response
conn.send({ "success": False, "errors": { "reason": str(err)}})
conn.close()
return None
else:
try:
r = s.get("%s/c/%s/faktura-prijata/$sum.json" % (hostname, dbNazev), params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
#response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
#return response
conn.send({ "success": False, "errors": { "reason": str(err)}})
conn.close()
return None
obj_prijata = r.json();
data_prijata = obj_prijata['winstrom']['sum']['sumDoklUcetni']['values']
vydajeCelk = float(data_prijata['sumDoklCelkem']['value'])
neuhrPrijCelk = float(data_prijata['sumDoklZbyvaUh']['value'])
dph_prijate = float(data_prijata['sumDoklDphCelk']['value'])
if prijmyCelk != 0:
result = {
"corporation": nazev,
"dbName": dbNazev,
"prijmyCelk": "%s €" % prijmyCelk,
"nakladyCelk": "%s €" % vydajeCelk,
"ziskCelk": "%s €" % (prijmyCelk-vydajeCelk),
"marzaCelk": ((prijmyCelk-vydajeCelk)/prijmyCelk*100),
"neuhrVydCelk": "%s €" % neuhrVydCelk,
"neuhrPrijCelk": "%s €" % neuhrPrijCelk,
"dph": "%s €" % (dph_vydane-dph_prijate),
}
else:
result = {
"corporation": nazev,
"dbName": dbNazev,
"prijmyCelk": "%s €" % prijmyCelk,
"nakladyCelk": "%s €" % vydajeCelk,
"ziskCelk": "%s €" % (prijmyCelk-vydajeCelk),
"marzaCelk": 0,
"neuhrVydCelk": "%s €" % neuhrVydCelk,
"neuhrPrijCelk": "%s €" % neuhrPrijCelk,
"dph": "%s €" % (dph_vydane-dph_prijate),
}
conn.send(result)
conn.close()
return None
#####################################################################################
def hometables(request):
s = requests.Session()
response = HTTPResponse()
hostname = request.query.get('hostname', '')[0]
auth = request.query.get('auth', '')[0]
p_queue = []
result = []
json_r = {"success": True}
payload = {'authSessionId': request.query.get('auth', '')[0]}
try:
r = s.get("%s/c.json" % hostname, params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
return response
obj = r.json()
data = obj['companies']['company']
data = make_list(data)
parent_conn, child_conn = Pipe()
for company in data:
p_queue.append(Process(target=hometables_one, args=(child_conn, request, s, hostname, payload, company))) #create a new process with hometables_one function
p_queue[-1].start()
for p in p_queue:
received_data = parent_conn.recv()
if "success" not in received_data:
result.append(received_data)s
p.join()
else:
response.write(ujson.dumps(received_data)) #error in hometables_one function
return response
json_r["data"] = result
response.write(ujson.dumps(json_r))
return response
在這一部分
try:
r = s.get("%s/c.json" % hostname, params=payload, verify=False)
r.raise_for_status()
except requests.exceptions.RequestException as err:
response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}}))
return response
obj = r.json()
data = obj['companies']['company']
data = make_list(data)
我收到了當前處於系統中的所有公司的JSON請求,然后我為每個公司運行了hometables_one函數。 最終data
可能如下所示:
[{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo","id":"4","licenseGroup":"null","nazev":"Sveatlo","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"}]
或者像這樣:
[{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo","id":"4","licenseGroup":"null","nazev":"Sveatlo","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"},{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo1","id":"4","licenseGroup":"null","nazev":"Sveatlo1","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"}]
在第一種情況下,當只有一個項目時, hometables_one
函數運行沒有任何問題,但添加另一項導致錯誤[Errno 1] _ssl.c:1428: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
或[Errno 1] _ssl.c:1428: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac
。 另一件事是,當我在沒有多處理的情況下運行代碼時,即hometable_one函數的內容在hometables函數的for循環中,它運行沒有任何問題。 為什么我會收到這些錯誤? 請問有人幫幫我嗎?
謝謝你的回答
我遇到過類似的問題。 我認為此錯誤是多個進程嘗試訪問同一SSL連接的結果。 您可以嘗試的是在每個進程觸發請求之前引入隨機延遲:
time.sleep(random.randrange(10))
r = s.get("%s/c.json" % hostname, params=payload, verify=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.