2015-11-18 20 views
12

Khi tôi thực thi các dòng dưới đây,Handshake Thất bại trong python (_ssl.c: 590)

req = urllib2.Request(requestwithtoken) 
self.response = urllib2.urlopen(req,self.request).read() 

Tôi nhận được ngoại lệ sau đây:

SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590) 

Vấn đề là tôi có thể có được mã thông báo bằng cách ping dịch vụ bằng cách sử dụng curl. Trong quá trình truy xuất mã thông báo, tất cả các chứng chỉ đã được xác minh. Đổi lại, bằng cách sử dụng mã thông báo đã tạo, tôi không thể kết nối với dịch vụ. Tôi nhận được lỗi ở trên trong khi thử. Điều gì có thể là lý do cho điều đó?

Trả lời

11

Tôi gặp sự cố tương tự. Có thể do máy chủ từ xa của bạn yêu cầu mật mã không được hỗ trợ bởi urllib2. Tôi nghĩ rằng có hai giải pháp có thể:

  1. Enable your specific cipher in urllib. Tôi nghĩ bạn cũng có thể kích hoạt all ciphers supported (xem phần dưới cùng của trang) nhưng thay vào đó hãy kiểm tra xem bạn đang sử dụng cái nào với curl như được hiển thị trong liên kết ở trên.

  2. Cài đặt requests với gói bảo mật bổ sung bằng cách sử dụng: pip install requests[security]. Nó được thảo luận thêm trong số này requests issue on github.

Tôi đã làm tùy chọn thứ hai và nó hoạt động cho tôi.

-2

Tôi cũng gặp vấn đề tương tự. Kiểm tra phiên bản của yêu cầu bạn đang sử dụng.

import requests 
print requests.__version__ 

Nếu phiên bản là 2.18.4, bạn nên thử hạ cấp xuống phiên bản 2.11.1. Tôi đã làm điều này, và nó cố định vấn đề của tôi. Để thực hiện việc này, hãy thực hiện các lệnh sau trong thiết bị đầu cuối

pip uninstall requests 
pip install requests==2.11.1 

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan