2012-10-14 8 views
15

में HTTPS अनुरोध रूबी में HTTPS अनुरोधों के लिए कोई मणि या लाइब्रेरी है? इसे क्या कहा जाता है और क्या आप कुछ उदाहरण उपयोग प्रदान कर सकते हैं?रूबी

जो मैं करने की कोशिश कर रहा हूं वह एक पृष्ठ खोलता है, इससे कुछ पाठ पार्स करता है, और फिर इसे आउटपुट करता है।

+0

क्या आप http या https अनुरोधों के बारे में पूछ रहे थे? प्रश्न शीर्षक शरीर से मेल नहीं खाता है। –

+0

चूंकि सभी उत्तर HTTPS के बारे में हैं, इसलिए मैंने HTTPS के बारे में पूछने के लिए प्रश्न बदल दिया। – Kevin

उत्तर

22

रूबी मानक पुस्तकालय

के साथ एसएसएल अनुरोध
require 'net/http' 
require 'uri' 
Net::HTTP.get URI('https://encrypted.google.com') 

Net::HTTP रूबी (> = 2.0.0) डिफ़ॉल्ट रूप से SSL सत्यापन करता है यदि आप एक यूआरआई ऑब्जेक्ट पास करते हैं जिसमें "https" यूआरएल है। देखें https://github.com/ruby/ruby/blob/778bbac8ac2ae50f0987c4888f7158296ee5bbdd/lib/net/http.rb#L481

आप एक समाप्त प्रमाणपत्र के साथ domain पर एक अनुरोध प्राप्त करके इसे सत्यापित कर सकते हैं। रूबी HTTP रत्नों से

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

एसएसएल अनुरोध

आप एक विकल्प का उपयोग करना चाहते हैं, तो आप निम्नलिखित जवाहरात कि भी डिफ़ॉल्ट रूप से SSL सत्यापन करता है का उपयोग कर सकते हैं:

  1. Excon

एक्सकॉन एक शुद्ध रूबी HTTP कार्यान्वयन है।

require 'excon' 
Excon.get 'https://encrypted.google.com' 
  1. Curb

पर अंकुश लगाने हुड के नीचे libcurl का उपयोग करता है एक HTTP ग्राहक है।

require 'curl' 
Curl.get 'https://encrypted.google.com' 
  1. http.rb

HTTP या http.rb एक शुद्ध रूबी HTTP कार्यान्वयन है लेकिन http_parser.rb का उपयोग करता HTTP अनुरोध और प्रतिक्रियाओं पार्स करने के लिए। चूंकि http_parser.rb देशी एक्सटेंशन का उपयोग करता है, इसलिए यह सबसे तेज़ HTTP क्लाइंट लाइब्रेरी में से एक होने का दावा करता है। लेकिन हमेशा के रूप में, नमक के अनाज के साथ बेंचमार्क ले लो।

require 'http' 
HTTP.get 'https://encrypted.google.com' 
  1. HTTPClient

httpclient एक और शुद्ध रूबी कार्यान्वयन है।

require 'httpclient' 
HTTPClient.get 'https://encrypted.google.com' 

यहां सूचीबद्ध क्या है HTTP पुस्तकालय और HTTP रैपर नहीं।HTTParty और Faraday जैसे रैपर रत्न या तो एक विशेष HTTP कार्यान्वयन के आसपास लपेटें या एक एकीकृत HTTP इंटरफ़ेस प्रदान करने के लिए एडाप्टर का उपयोग करें। आप यह Comparison matrix of Ruby HTTP client features देख सकते हैं। यह वहां मौजूद प्रत्येक एकल HTTP क्लाइंट लाइब्रेरी की सुविधाओं की तुलना करता है। लेकिन ध्यान दें कि जानकारी से अद्यतन नहीं है।

+1

मुझे लगता है कि आप क्लाइंट को 'http = HTTPClient.new' में http नहीं मानते हैं, यह वास्तव में 'क्लाइंट = HTTPClient.new' – Eric

+0

होना चाहिए। तुम सही महोदय हो तय की। –

3

वहाँ Net::HTTP

बुलाया भाषा में एक एकीकृत पुस्तकालय यह का एक उदाहरण उपयोग होगा:

uri = URI('https://example.com/some_path?query=string') 
response = Net::HTTP.start(uri.host, uri.port) do |http| 
    request = Net::HTTP::Get.new uri.request_uri 
    http.request request # Net::HTTPResponse object 
end 
puts response.body 

अद्यतन: आप इस तरह है कि पुस्तकालय शामिल करने की जरूरत:

require 'net/https'