【问题标题】:Post request with http/net results in EOF? Ruby http library使用 http/net 发布请求会导致 EOF? Ruby http 库
【发布时间】:2018-01-23 23:59:45
【问题描述】:

我正在尝试发出适用于邮递员的发布请求:

上述方法有效,当我检查交易列表时,它会出现。

但是,当使用 Ruby 的 http/net 库时,此发布请求不起作用。什么给了?

 def post(path, params)
    18:   url = URI.parse('http://www.jobcoin.company.com' + path)
 => 19:   binding.pry
    20:   http = Net::HTTP.new(url.host, url.port)
    21:   req = Net::HTTP::Post.new(url.request_uri)
    22:   req.set_form_data(params)
    23:
    24:   binding.pry
    25:   response = http.request(req)
    26: end

[1] pry(#<JobcoinClient::Requests::Connection>)> url
=> #<URI::HTTP:0x007fb4e622ec80 URL:http://www.jobcoin.company.com/protozoan/api/transactions>

会发生什么:

http.request(req)
=> EOFError: end of file reached

【问题讨论】:

  • 几周前我在使用 HTTP 时遇到了这个确切的错误。我差点在墙上打了一个洞。不幸的是,Net::HTTP 有时(经常)会出于很多不同的原因给你这个EOFError,而无需解释。
  • 你找到解决方案了吗?
  • 我会发表一些想法的答案
  • 还有人知道发生了什么吗?

标签: ruby


【解决方案1】:

Net::HTTP 会给你 EOFError 有很多你可能没想到的原因,其中许多实际上是合法的(即描述性的)。我发现这很烦人且难以调试。如果你用谷歌搜索“ruby net http eoferror”,你会得到大量种类繁多的 SO 问题。当我试用您的代码时,我也收到了 EOFError,但是当我检查响应对象时,我注意到请求实际上仍在执行(在我的情况下出现 404 错误)。

一般来说,我使用HTTParty,因为它不像Net::HTTP那么低级,而且通常更容易使用。

这是一个使用 HTTParty 重写的代码示例:

def post(path, params)
  url = URI.parse('http://www.jobcoin.company.com' + path)

  response = HTTParty.post(url, params)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多