尝试通过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
答案 0 :(得分:17)
在创建HTTP客户端时指定端口修复了此问题。
http = Net::HTTP.new(API_URI.host, API_URI.port)
或
http = Net::HTTP.new(API_URI.host, 443)
答案 1 :(得分:0)
对我来说,这是因为我已将服务器作为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'