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

Ruby 1.9.3用TCPSocket调用Azure ML Endpoint遇连接重置错误

问题分析与解决方案

核心问题原因

你的代码存在两个关键错误,导致服务器强制关闭连接:

  • 未使用SSL加密:目标端口是443(HTTPS专属端口),直接用TCPSocket发送明文HTTP请求,服务器会拒绝并强制断开连接。
  • 请求行格式错误:POST请求的语法不符合HTTP规范,包含多余单引号,且未指定Azure ML推理端点的正确路径(默认路径为/score)。

修正后的代码

require 'socket'
require 'openssl'

data =  '{
            "Inputs": {
              "data": [
                {
                  "Column1": "example_value",
                  "Column2": 0
                }
              ]
            },
            "GlobalParameters": {
              "method": "predict"
            }
          }'

# 建立TCP连接并包装为SSL加密连接
tcp_socket = TCPSocket.open('xxxxx-ml-yyyyy.northeurope.inference.ml.azure.com', 443)
socket = OpenSSL::SSL::SSLSocket.new(tcp_socket)
socket.connect

# 修正请求行:指定正确端点路径,移除多余单引号
request = "POST /score HTTP/1.1\r\n"
request += "Host: xxxxx-ml-yyyyy.northeurope.inference.ml.azure.com\r\n"
request += "Content-Type: application/json\r\n"
request += "Authorization: Bearer 1234567890abcdefghjklmnopqrstuvwx\r\n"
request += "Content-Length: #{data.bytesize}\r\n"
request += "\r\n"
request += data
socket.print(request)

# 读取响应内容
response = ""
while line = socket.gets
  response += line
end

# 依次关闭SSL套接字与底层TCP套接字
socket.close
tcp_socket.close

puts response

关键修改说明

  1. 添加SSL加密支持:引入Ruby 1.9.3自带的openssl库,用SSLSocket包装TCPSocket,建立符合HTTPS要求的加密连接。
  2. 修正请求行格式:将错误的请求行改为POST /score HTTP/1.1,其中/score是Azure ML推理端点的默认路径(若你的端点有自定义路径,请替换为实际路径)。
  3. 规范连接关闭流程:先关闭SSL套接字,再关闭底层TCP套接字,确保资源正常释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:22