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

开发机器无法使用Net::HTTP,Rails控制台请求报错求助

问题原因&解决方案

嘿,我一眼就揪出问题啦!你遇到的SocketError完全是因为代码里的一个小疏忽:

你在调用Net::HTTP.new的时候,第一个参数传了"http://google.fr"——但Net::HTTP的第一个参数只需要纯主机名(比如google.fr),不能带http://这个协议前缀!

为什么浏览器能正常访问但代码不行?

浏览器会自动解析URL里的协议、主机名、路径这些部分,但Net::HTTP的new方法要求你单独传入纯主机名和端口,它不会自动处理前缀里的http://。所以代码里它把整个http://google.fr当作主机名去DNS解析,自然找不到对应的IP,就抛出了“Name or service not known”的错误。

修正后的代码

把主机名里的http://去掉就搞定了:

http = Net::HTTP.new("google.fr", 80)
req = Net::HTTP::Post.new("/stupid/url/")
res = http.request(req)

或者更推荐用Net::HTTP.start的写法,它会自动帮你管理连接的打开和关闭,更规范:

Net::HTTP.start("google.fr", 80) do |http|
  req = Net::HTTP::Post.new("/stupid/url/")
  res = http.request(req)
  # 这里可以添加处理响应的逻辑
end

你在Rails里调用API时遇到的同类错误,大概率也是犯了同样的毛病——检查一下是不是把带http://的完整URL传给了Net::HTTP的主机参数,改成纯主机名应该就能解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:04:19