You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby发送HTTP POST请求遇OpenSSL::SSL::SSLError版本号错误求助

排查方案

1. 优先检查请求端口配置

从你提供的调试日志能明确看到关键问题:

opening connection to eu2.api.concursolutions.com:80...
starting SSL for eu2.api.concursolutions.com:80...

你的Ruby代码正在向80端口发起SSL请求——80是HTTP的默认端口,不支持SSL握手,必然会返回版本错误。而curl/Postman能成功,是因为它们默认使用HTTPS的443端口。

  • 立刻检查代码中请求的URL:确认是不是写了http://eu2.api.concursolutions.com(HTTP协议,走80端口),而非https://开头的HTTPS地址。
  • 如果是通过配置项指定端口,检查是否错误设为80,应改为443。

2. 验证HTTP客户端的SSL配置逻辑

即便设置了http.ssl_version="TLSv1_2",如果客户端没正确开启SSL,也会出问题:

  • 检查你用的Ruby HTTP客户端(比如Net::HTTP、Faraday等)初始化代码:是否显式设置了use_ssl = true?
    Net::HTTP示例代码:
    uri = URI('https://eu2.api.concursolutions.com')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true # 必须显式开启SSL
    http.ssl_version = :TLSv1_2
    response = http.get(uri.path)
    
  • 若用的是封装后的客户端(比如Faraday),确认ssl选项是否正确设置,且未被其他配置覆盖。

3. 对比正常请求的配置(us2端点)

既然us2.api.concursolutions.com能正常请求,把两个端点的请求代码做逐行对比:

  • 检查两个请求的URL协议、端口、SSL配置是否完全一致,是否eu2的请求遗漏了HTTPS协议或SSL开启步骤。
  • 在Rails控制台打印eu2请求的完整URI对象,查看uri.scheme是否为https,uri.port是否为443。

4. 排查环境变量或配置文件的干扰

  • 检查应用是否有全局HTTP代理、端口转发配置,是否HTTP_PROXY、HTTPS_PROXY这类环境变量错误地将HTTPS请求导向了80端口。
  • 查看初始化脚本或配置文件,是否针对eu2域名的请求修改了端口或协议。

5. 测试最小化请求代码

写一段最简化的Ruby代码直接请求eu2端点,排除业务逻辑干扰:

require 'net/http'
require 'uri'

uri = URI('https://eu2.api.concursolutions.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1_2
http.set_debug_output($stdout)

begin
  response = http.get(uri.path)
  puts "Response code: #{response.code}"
rescue => e
  puts "Error: #{e.message}"
end

如果这段代码能成功,说明问题出在业务代码的配置里;如果仍报错,再检查服务器上Ruby、OpenSSL版本是否和curl使用的一致(比如Ruby绑定的OpenSSL是否存在版本兼容问题)。


内容的提问来源于stack exchange,提问作者Mika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:55:20