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에서 http 대신 https를 사용하는 경우 다음 행을 추가해야 합니다.
parsed_url = URI.parse(url)
http = Net::HTTP.new(parsed_url.host, parsed_url.port)
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 세션을 유지하기 위해 use @http.st art를 사용합니다.그 외에 가장 관련성이 높은 부분인 getcall 내부의 URI.encode(url)를 시도해 보는 것이 좋습니다.
Net::HTTP 및 Net:에 연결됩니다.이와 같은 FTP 문제는 주기적으로 발생하며, 이 경우 통화를 시간 초과()로 둘러싸면 해당 문제가 모두 사라집니다.따라서 이 작업이 3분 정도 중단된 후 EOF 오류가 발생할 수 있습니다.
res = Net::HTTP.post_form(uri, args)
이것은 항상 나에게 해결책입니다.
res = timeout(120) { Net::HTTP.post_form(uri, args) }
루비-1.8.7-p357 같은 문제를 겪었지만, 많은 것들을 시도했지만 허사였습니다.
이는 동일한 XMLRPC를 사용하는 여러 통화에서만 발생한다는 것을 마침내 깨달았습니다.클라이언트 인스턴스!
그래서 지금 저는 각 통화에서 고객을 다시 인스턴스화하고 있으며 효과가 있습니다. |
몇 가지 조사를 한 후, 이것은 루비의 집에서 일어나고 있었습니다.XMLRPC::Client
라이브러리 - 사용NET::HTTP
고객은 다음을 사용합니다.start()
의 방법.NET::HTTP
나중에 요청할 수 있도록 연결을 열어 둡니다.
이는 마지막 요청 후 정확히 30초 후에 발생한 것입니다. 따라서 여기서는 서버가 히트하고 있는 서버가 그 시간 이후에 요청을 종료하고 있다고 가정합니다.기본값이 무엇인지 잘 모르겠습니다.NET::HTTP
요청을 계속 열어둘 수 있습니다. 하지만 60초 동안 테스트를 통해 문제가 해결되는지 확인해 보겠습니다.
최근에 우연히 이 문제를 발견했는데, 이 문제가 발생한 것은 우리가 도달한 엔드포인트의 네트워크 시간 초과 때문이라는 것을(를 발견했습니다.다행히도 시간 초과 기간을 늘릴 수 있었습니다.
이것이 우리의 문제인지 확인하기 위해 (실제로 net http의 문제가 아님) 같은 요청을 curl로 했고 요청이 종료되었음을 확인했습니다.
루비 온 레일즈에서 나는 이 코드를 사용했고, 그것은 완벽하게 작동합니다.
req_profilepic = ActiveSupport::JSON.decode(open(URI.encode("https://graph.facebook.com/me/?fields=picture&type=large&access_token=#{fb_access_token}")))
profilepic_url = req_profilepic['picture']
언급URL : https://stackoverflow.com/questions/5244887/eoferror-end-of-file-reached-issue-with-nethttp
'programing' 카테고리의 다른 글
Git에서 추적되지 않은 파일을 제거하는 방법은 무엇입니까? (0) | 2023.07.09 |
---|---|
WordPress로 버전 제어하는 방법 (0) | 2023.07.09 |
git-merge가 줄바꿈 차이를 무시할 수 있습니까? (0) | 2023.07.09 |
getdate()의 날짜 부분만 가져오는 방법은 무엇입니까? (0) | 2023.07.09 |
래퍼를 사용하여 데이터베이스에 작성된 보기에 액세스하는 방법 (0) | 2023.07.09 |