Net::HTTP SocketError: getaddrinfo: nodename nor servname provided, or not known Net::HTTP套接字错误:getaddrinfo:未提供节点名或服务名,或者未知

7

我已经通过谷歌搜索和查看相关帖子来寻找答案,但我认为这不是Rails/Ruby的问题,但不确定接下来该怎么做。

irb(main):007:0> Net::HTTP.get_response("http://www.apple.com","")
SocketError: getaddrinfo: nodename nor servname provided, or not known
from /Users/dan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/net/http.rb:879:in `initialize'

除此之外没有网络问题。在浏览器中,apple.com可以正常加载。这是我在本地开发的rails应用程序中遇到的情况。希望通过第三方API获取JSON请求。所有Net::HTTP请求都像这样。

1个回答

5

在调用get_response方法之前,您需要传递一个URI对象,以便其中包含了schemehost等信息:

URI('http://www.apple.com').host
# => "www.apple.com"
URI('http://www.apple.com').scheme
# => "http" 

因此,为了解决您的问题,请按照以下步骤操作:
Net::HTTP.get_response(URI("http://www.apple.com"))
# => #<Net::HTTPOK 200 OK readbody=true> 

要获取响应正文,请按照以下步骤操作:
Net::HTTP.get_response(URI("http://www.apple.com")).body

请参阅get_response文档以获取更多详细信息。

1
看文档!!?;) 那个方法可行,感谢解释。我之前得到的示例没有URI调用。谢谢。 - Dan Tappin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接