EOFError:文件结尾达到Net :: HTTP的问题

我正在使用ruby-1.8.7-p302 / Rails 2.3.11。 我正在尝试使用fql(facebook api)获取链接的统计信息。 这是我的代码:

def stats(fb_post_url)
  url = BASE_URI + "?query=#{URI.encode("select like_count from link_stat where url="#{fb_post_url}"")}"
  parsed_url = URI.parse(url)
  http = Net::HTTP.new(parsed_url.host, parsed_url.port)
  request = Net::HTTP::Get.new(parsed_url.request_uri)

  response = http.request(request)
  response.inspect
end

这是错误:

EOFError: end of file reached
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/protocol.rb:135:in `sysread'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/timeout.rb:67:in `timeout'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/timeout.rb:101:in `timeout'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/protocol.rb:126:in `readline'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:2028:in `read_status_line'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:2017:in `read_new'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:1051:in `request'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:1037:in `request'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:543:in `start'
from /home/rahul/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/net/http.rb:1035:in `request'
from /home/rahul/Work/Radr/lib/fb_stats.rb:13:in `stats'
from (irb):10

这似乎只发生在facebook api的情况下。 另外,我看到它在某些帖子中提出这可能是Net :: HTTP中的一个错误。


如果该URL使用https而不是http,则需要添加以下行:

parsed_url = URI.parse(url)
http = Net::HTTP.new(parsed_url.host, parsed_url.port)
http.use_ssl = true

请注意附加的http.use_ssl = true

处理http和https的更合适的代码将类似于下面的代码。

url = URI.parse(domain)
req = Net::HTTP::Post.new(url.request_uri)
req.set_form_data({'name'=>'Sur Max', 'email'=>'some@email.com'})
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = (url.scheme == "https")
response = http.request(req)

在我的博客中查看更多内容:EOFError:在使用Net :: HTTP发布表单时文件结尾达到了问题。


我有一个与非SSL服务请求类似的问题。

这个博客模糊地建议尝试对传递给'get'的URL进行URI编码:http://www.loudthinking.org/2010/02/ruby-eoferror-end-of-file-reached.html

我根据绝望情况对它进行了一次尝试,在我的极限测试中,这似乎已经为我解决了这个问题。 我的新代码是:

@http = Net::HTTP.new('domain.com')  
@http = @http.start    
url = 'http://domain.com/requested_url?blah=blah&etc=1'
req = Net::HTTP::Get.new(URI.encode(url))
req.basic_auth USERNAME, API_KEY
res = @http.request(req) 

请注意,我使用@ http.start,因为我想通过多个请求维护HTTP会话。 除此之外,您可能想尝试get调用中最相关的部分: URI.encode(url)


我有同样的问题,ruby-1.8.7-p357,尝试了大量的东西......

我终于意识到,它只发生在使用相同XMLRPC :: Client实例的多个调用中!

所以现在我在每次调用时重新实例化客户端,并且它正常工作:|

链接地址: http://www.djcxy.com/p/38771.html

上一篇: EOFError: end of file reached issue with Net::HTTP

下一篇: Ruby confluence4r examples