HTTP POST(未知协议)上的SSL错误

尝试通过SSL连接到Imgur API会给我一个错误。 这是代码和错误:

API_URI = URI.parse('https://api.imgur.com') API_PUBLIC_KEY = 'Client-ID --' ENDPOINTS = { :image => '/3/image', :gallery => '/3/gallery' } # Public: Upload an image # # args - The image path for the image to upload # def upload(image_path) http = Net::HTTP.new(API_URI.host) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE params = {'image' => File.open(image_path)} request = Net::HTTP::Post.new(API_URI.request_uri) request.set_form_data(params) request.add_field('Authorization', API_PUBLIC_KEY) response = http.request(request) puts response.body end 

而错误:

 `connect': SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol (OpenSSL::SSL::SSLError) 

我知道VERIFY_NODE不是很好的做法但我现在只想测试连接。

Ruby版本:1.9.2

在创建HTTP客户端时指定端口可修复此问题。

 http = Net::HTTP.new(API_URI.host, API_URI.port) 

要么

 http = Net::HTTP.new(API_URI.host, 443) 

对我来说,这是因为我已经将服务器作为http( tcp:// )服务器而不是https( ssl:// )启动。

 bundle exec puma config.ru -b 'tcp://0.0.0.0:3456?key=/path/to/key.key&cert=/path/to/cert.crt' 

代替:

 bundle exec puma config.ru -b 'ssl://0.0.0.0:3456?key=/path/to/key.key&cert=/path/to/cert.crt'