开发机器无法使用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
相关产品推荐
相关产品推荐

