복붙노트

[RUBY-ON-RAILS] 참고 EOFError : 파일의 마지막 순으로 문제에 도달 : HTTP

RUBY-ON-RAILS

참고 EOFError : 파일의 마지막 순으로 문제에 도달 : HTTP

나는 2.3.11 레일 / 루비 1.8.7-P302을 사용하고 있습니다. 나는 링크에 대한 통계를 얻을 수 FQL (페이스 북 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

이것은 단지 페이스 북 API의 경우에 발생하는 것으로 보인다. 또한, 나는이 순 :: HTTP에서 버그가 수 수있는 몇 가지 게시물에 제안했다.

해결법

  1. ==============================

    1.URL이 http가 아닌 https를 사용하는 경우, 다음과 같은 라인을 추가해야합니다 :

    URL이 http가 아닌 https를 사용하는 경우, 다음과 같은 라인을 추가해야합니다 :

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

    추가 http.use_ssl 사실 =합니다.

    그리고 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를 : 인터넷 : HTTP와 양식을 게시 할 때 파일의 마지막 문제를했다.

  2. ==============================

    2.나는 비 SSL 서비스에 대한 요청과 비슷한 문제가 있었다.

    나는 비 SSL 서비스에 대한 요청과 비슷한 문제가 있었다.

    http://www.loudthinking.org/2010/02/ruby-eoferror-end-of-file-reached.html : 막연 제안이 블로그는 URI가 '수'에 전달되는 URL을 인코딩 시도

    나는 절망에 따라, 그것은에서 촬영을했다, 나의이 테스트 제한하는이 나를 위해 그것을 해결 한 것으로 보인다. 나의 새로운 코드는 다음과 같습니다

    @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 세션을 유지하기 위해 원하는대로 내가 @ http.start를 사용하는 것이. URI.encode (URL) 가져 오기 호출 내부 : 그 이외에, 당신은 대부분의 관련 부분을 시도하는 것 같아서

  3. ==============================

    3.나는 정기적으로 인터넷 : HTTP와 같은 인터넷 : FTP 문제로 실행하는 것을 발견하고, 내가 할 때) 타임 아웃 (와 통화를 둘러싼 그 모든 문제가 사라질 수 있습니다. 그래서 가끔 삼분 정도 멈춘 곳 다음에서 EOFError 인상 :

    나는 정기적으로 인터넷 : HTTP와 같은 인터넷 : FTP 문제로 실행하는 것을 발견하고, 내가 할 때) 타임 아웃 (와 통화를 둘러싼 그 모든 문제가 사라질 수 있습니다. 그래서 가끔 삼분 정도 멈춘 곳 다음에서 EOFError 인상 :

    res = Net::HTTP.post_form(uri, args)
    

    이것은 항상 나를 위해 그것을 해결합니다

    res = timeout(120) { Net::HTTP.post_form(uri, args) }
    
  4. ==============================

    4.저도 같은 문제, 루비 1.8.7-p357가 있고, 헛된 것들의 부하를 시도 ...

    저도 같은 문제, 루비 1.8.7-p357가 있고, 헛된 것들의 부하를 시도 ...

    나는 마침내 같은 XMLRPC :: 클라이언트 인스턴스를 사용하여 여러 통화에만 일어나는 것을 깨달았다!

    그래서 지금은 각각의 호출에 나의 클라이언트를 다시 인스턴스화하고있어 그냥 작동 : |

  5. ==============================

    5.NET을 사용 : HTTP - 몇 가지 조사를 수행 한 후,이 루비의 XMLRPC :: 클라이언트 라이브러리에서 발생했다. 클라이언트는 미래의 요청에 대한 연결을 계속 열어 NET : HTTP의 시작 () 메소드를 사용합니다.

    NET을 사용 : HTTP - 몇 가지 조사를 수행 한 후,이 루비의 XMLRPC :: 클라이언트 라이브러리에서 발생했다. 클라이언트는 미래의 요청에 대한 연결을 계속 열어 NET : HTTP의 시작 () 메소드를 사용합니다.

    여기 내 가정이 서버 그것의 타격은 그 시간 이후 요청을 닫는 것입니다 - 그래서이 마지막 요청 후 30 초 정밀하게 일어났다. 나는 확실하지 기본값은 NET : HTTP 개방 요청을 유지하기 위해 무엇을 해요 -하지만 60초와 테스트가 해결되면 문제를보고에 대해 난.

  6. ==============================

    6.나는 최근에 우연히 결국 이것은 우리가 타격 된 엔드 포인트에서 네트워크 타임 아웃에 의해 발생 된 것으로 나타났다. 다행히 우리를 위해 우리는 시간 제한 기간을 증가 할 수 있었다.

    나는 최근에 우연히 결국 이것은 우리가 타격 된 엔드 포인트에서 네트워크 타임 아웃에 의해 발생 된 것으로 나타났다. 다행히 우리를 위해 우리는 시간 제한 기간을 증가 할 수 있었다.

    이 (사실이 아닌 순 HTTP에 문제가) 우리의 문제였다 확인하려면 나는 컬 같은 요청을하고 요청이 종료되는 것을 확인했다.

  7. ==============================

    7.루비 레일 I에이 코드를 사용, 그것은 완벽하게 작동합니다 :

    루비 레일 I에이 코드를 사용, 그것은 완벽하게 작동합니다 :

    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']
    
  8. from https://stackoverflow.com/questions/5244887/eoferror-end-of-file-reached-issue-with-nethttp by cc-by-sa and MIT license