EOFError: Ende der Datei erreicht Problem mit Net :: HTTP
Ich bin mit ruby-1.8.7-p302/Schienen 2.3.11. Ich versuche zur Verwendung von fql(facebook api), um Statistiken für einen link. Hier ist mein code:
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
und hier der Fehler:
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
Dies zu geschehen scheint, nur im Fall der facebook-api. Auch, ich habe es vorgeschlagen, in einigen posten, das könnte ein bug in Net::HTTP.
Kommentar zu dem Problem
Fanden Sie die Lösung für dieses? Ich stehe vor ähnlichen problem in BDE-API.
InformationsquelleAutor der Frage Rahul Singh | 2011-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die URL mit https statt mit http, müssen Sie die folgende Zeile hinzu:
Beachten Sie die zusätzlichen
http.use_ssl = true
.Und die mehr entsprechenden code, die behandeln würden, werden sowohl http als auch https werden der folgenden ähnlich.
Sehen Sie mehr in meinem blog: EOFError: Ende der Datei erreicht Problem bei der post ein Formular mit Net::HTTP.
InformationsquelleAutor der Antwort Sur Max
Ich hatte ein ähnliches problem mit einer Anfrage an einen nicht-SSL-Dienst.
Diesem blog vorgeschlagen vage, um zu versuchen, URI-encoding der URL übergeben wird, 'get': http://www.loudthinking.org/2010/02/ruby-eoferror-end-of-file-reached.html
Ich nahm einen Schuss auf Sie, auf Basis Ihrer Verzweiflung und in meinem Begrenzung der Tests scheint dies behoben haben für mich. Mein neuer code ist:
Hinweis, dass ich die Verwendung von @http.beginnen will ich pflegen den HTTP-session über mehrere requests. Andere als die, vielleicht möchten Sie versuchen, den relevantesten Teil, das ist: URI.codieren(url) innerhalb der get-Aufruf
InformationsquelleAutor der Antwort Phil
Ich hatte das gleiche problem, ruby-1.8.7-p357 ,versucht, jede Menge Dinge umsonst...
Habe ich schließlich festgestellt, dass es passiert, nur auf mehrere Anrufe mit der gleichen XMLRPC::Client-Instanz !
So, ich bin jetzt re-instanziieren mein client bei jedem Aufruf und es funktioniert einfach 😐
InformationsquelleAutor der Antwort jobwat
Finde ich, dass ich mit Net::HTTP-und Net::FTP-Probleme wie dieses in regelmäßigen Abständen, und wenn ich es Tue, um den Anruf mit einem timeout() macht alle diese Probleme verschwinden. Also, wo wird dies gelegentlich hängen, für 3 Minuten oder so und dann erhöhen, eine EOFError:
Immer diese behebt es für mich:
InformationsquelleAutor der Antwort Sean
In Schienen, die ich benutzt diesen code und es funktioniert perfekt
Hoffe, das hilft dir 🙂
InformationsquelleAutor der Antwort Nicolas Grenié
Nachdem ich einige der Forschung, diese geschehen in Ruby ' s
XMLRPC::Client
- Bibliothek, Die verwendetNET::HTTP
. Der client verwendet diestart()
Methode inNET::HTTP
hält die Verbindung offen für zukünftige Anforderungen.Dies geschah genau 30 Sekunden nach der letzten Anfragen, die - So meine Annahme hier ist, dass der server Sie auf, die Schließung Anforderungen nach dieser Zeit. Ich bin mir nicht sicher, was der Standard ist für
NET::HTTP
zu halten, Anfrage offen - aber ich bin zu test mit 60 Sekunden zu sehen, ob das löst das Problem.InformationsquelleAutor der Antwort TJ Biddle