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
URI.parse(uri_string).read
대신 사용 하면 매우 아름답게 작동합니다.
VERIFY_NONE
의미합니까? 대신 무엇을해야합니까?
require 'open-uri'
.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'가 필요했습니다. 이것은 더 이상 사실이 아닙니다.
Net::HTTP.get
URI 개체에 https
URL 이 전달되면 HTTPS 가져 오기 요청을 수행하기에 충분합니다 . 내 대답을 참조하십시오 : stackoverflow.com/a/36543895/382740 .
Ruby 2.0.0 이상에서는 https
URL이 있는 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"를 검색 할 때 가장 많이 검색되는 몇 안되는 검색 결과 중 하나이기 때문에 어쨌든 대답하기로 결정했습니다.
http.use_ssl = true
실제로 ssl을 사용하도록 강제 로 전화 를 걸어야했고 상황이 원활하게 진행되었습니다.
이것은 다음과 같아야합니다.
uri.port = Net::HTTP.https_default_port()
@data = Net::HTTP.get(uri)
IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )
SSL 확인을 비활성화하는 데 사용해야 했습니다. 우리의 경우 보안은 문제가 아니었고 서버는 우리가 통제 할 수 없었으며 일시적인 해결책이었습니다.