gpt4 book ai didi

ruby - 在 Ruby 中发出 http 请求时出现 OpenSSL 错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:34 25 4
gpt4 key购买 nike

我有一个发出 http 请求的服务,它看起来像这样:

require 'net/http'

class SenderNameService
def get_names(id)
domain = "http://www.somedomain.com"
path = "/api/orchards/users/#{id}"
url = URI.parse(domain + path)

req = Net::HTTP::Get.new(url.to_s)
token = generate_token
req.add_field("Authorization", token)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
res = http.start do |http|
http.request(req)
end

if res.code == '200'
return JSON.parse(res.body)
else
raise StandardError, "Request for sender names failed"
end
end

private

def generate_token
#Some JWT token generating logic goes here.
end
end

当我发出请求时,出现此错误:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol
from .rbenv/versions/2.3.3/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock'

这是怎么回事?这个错误是什么意思?

更新:当我将 http 更改为 https 时,错误得到修复。这是怎么回事?

最佳答案

http.use_ssl = true

UPDATE: The error gets fixed when I change http to https. What is going on?

默认情况下,http URL 使用端口 80,并且通常有一个服务器只使用 HTTP。 https URL 而是使用端口 443,其中有一个使用 HTTPS 的服务器所在的端口。但是,您正试图在没有支持 TLS 的服务器监听的 http 端口上强制执行 HTTPS(即 TLS+HTTP)。这意味着您的客户端开始与该服务器进行 TLS 握手,但没有收到 TLS 响应,而是收到 HTTP 响应。尝试将响应解释为 TLS 会导致您看到错误,即未知协议(protocol)。

关于ruby - 在 Ruby 中发出 http 请求时出现 OpenSSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com