[ruby] https URL에 Net :: HTTP.get 사용

Net::HTTP.get()https URL 을 사용하려고합니다 .

@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())

그러나 결과를 인쇄하려고하면 다음과 같은 결과가 나타납니다.

URI :: HTTPS를 문자열로 변환 할 수 없습니다.

거래는 무엇입니까? Ruby 1.8.7 (OS X)을 사용하고 있습니다.



답변

원래 답변 :

uri = URI.parse("https://example.com/some/path")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
@data = http.get(uri.request_uri)

주석에서 지적했듯이 이것은 더 우아합니다.

require "open-uri"
@data = URI.parse("https://example.com/some/path").read


답변

편집 : 내 접근 방식은 작동하지만 @ jason-yeo의 접근 방식 은 훨씬 쉽습니다.

2.1.2 부터 선호 되는 문서화 된 방법은 다음과 같습니다 ( 문서를 직접 인용 ).

HTTPS는 # use_ssl =에 의해 HTTP 연결에 활성화됩니다.

uri = URI('https://secure.example.com/some_path?query=string')

Net::HTTP.start(uri.host, uri.port,
  :use_ssl => uri.scheme == 'https') do |http|
  request = Net::HTTP::Get.new uri

  response = http.request request # Net::HTTPResponse object 
end

이전 버전의 Ruby에서는 HTTPS를 사용하려면 ‘net / https’가 필요했습니다. 이것은 더 이상 사실이 아닙니다.


답변

Ruby 2.0.0 이상에서는 httpsURL이 있는 uri 객체를 전달하는 것만으로도 HTTPS 가져 오기 요청을 수행 할 수 있습니다.

uri = URI('https://encrypted.google.com')
Net::HTTP.get(uri)

만료 된 인증서가 있는 도메인 에서 가져 오기 요청을 수행하여이를 확인할 수 있습니다 .

uri = URI('https://expired.badssl.com/')
Net::HTTP.get(uri)
# OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed

커밋 은 Ruby 2.0.0에서 도입되었습니다 .

get_response에 의해 호출 방법, Net::HTTP.get방법은 설정 :use_ssl (가) 때 true로 uri.scheme“HTTPS”입니다.

면책 조항 : 질문이 Ruby 1.8.7에 대한 것이라는 것을 이해합니다. 그러나 이것은 “https ruby”를 검색 할 때 가장 많이 검색되는 몇 안되는 검색 결과 중 하나이기 때문에 어쨌든 대답하기로 결정했습니다.


답변

이것은 다음과 같아야합니다.

uri.port = Net::HTTP.https_default_port()
@data = Net::HTTP.get(uri)


답변