使用Ruby中的net / http库的一些问题和奇怪的错误消息。回答是什么意思?

时间:2018-01-25 17:11:58

标签: ruby

我终于有了这段代码:

res = Net::HTTP.post_form(URI('http://jobcoin.gemini.com/protozoan/api/transactions'), {})
=> #<Net::HTTPBadRequest 400 Bad Request readbody=true>
res.body
=> "{\"error\":{\"amount\":[\"This field is required\"],\"fromAddress\":[\"This field is required\"],\"toAddress\":[\"This field is required\"]}}"

即使出现错误,我也可以向服务器发送帖子请求。

  1. readbody=true是什么意思?
  2. 这不起作用。为什么?错误消息的含义是什么?

    Net::HTTP.post_form(URI('http://www.jobcoin.gemini.com/protozoan/api/transactions'), {})
    SocketError: getaddrinfo: nodename nor servname provided, or not known
    

    似乎www导致此失败。为什么是这样?当我通过浏览器访问该网站时,该网站不存在。我一直认为这两个(使用www而没有www)是相同的地址。不是吗?

    1. nodenamesocketerror究竟是什么意思?

2 个答案:

答案 0 :(得分:1)

执行 public static void main(String[] args) { int[] thirteenMultiples = new int[400]; for (int dex = 1; dex < thirteenMultiples.length; dex ++) { int multiples = 13 * dex; thirteenMultiples[0] = multiples; System.out.println(Arrays.toString(thirteenMultiples)); 后收到的消息来自代表http响应的core ruby class

post_form

这会输出实例变量def inspect "#<#{self.class} #{@code} #{@message} readbody=#{@read}>" end (如果我理解的话)是一个告诉身体是否被读取的标志。

第二个问题太宽泛了。简而言之,您可以提供@read或“裸域”或两者。通常人们会将请求从www重定向到“裸域”,反之亦然。在您的情况下,似乎服务器不提供www因此错误。错误信息非常明显 - “没有服务此端点的节点(计算机)” -  read about sockets.

答案 1 :(得分:1)

这里有几件事:

  1. 您向API提出了错误的请求,这就是您获取的原因 #<Net::HTTPBadRequest 400 Bad Request readbody=true>。 根据回复机构的说法,你错过了一些必要的 参数。
  2. SocketError表示您正在尝试连接到不存在的主机。
  3. 现在回答你的问题:

    1. readbody=true表示已读取服务器响应。检查net/response.rb第197行。
    2. 认为我已经回答了您对SocketErrornodenameservname的一些疑问,请参阅服务器的域名。
    3. 希望它有所帮助。