Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby में HTTP रिक्वेस्ट्स में महारत: एक पूर्ण गाइड

यदि आप किसी वेबसाइट से जानकारी प्राप्त करना चाहते हैं, या यदि आप फॉर्म सबमिट करना, फाइल अपलोड करना आदि चाहते हैं।

आपको एक HTTP रिक्वेस्ट भेजनी होगी और फिर प्रतिक्रिया को प्रोसेस करना होगा।

इस लेख में आप सीखेंगे कि कैसे:

  • net/http का उपयोग करके एक सरल HTTP रिक्वेस्ट बनाएं
  • SSL रिक्वेस्ट्स भेजें
  • POST रिक्वेस्ट का उपयोग करके डेटा सबमिट करें
  • कस्टम हेडर्स भेजें
  • अपनी स्थिति के लिए सर्वश्रेष्ठ HTTP क्लाइंट चुनें

चलिए शुरू करते हैं!

HTTP रिक्वेस्ट कैसे भेजें

Ruby एक अंतर्निहित HTTP क्लाइंट के साथ आता है, इसे net/http कहा जाता है और आप इसका उपयोग किसी भी प्रकार की रिक्वेस्ट भेजने के लिए कर सकते हैं जिसकी आपको आवश्यकता है।

यहां एक net/http उदाहरण है:

 require 'net/http' Net::HTTP.get('example.com', '/index.html') 

यह पेज की HTML सामग्री के साथ एक स्ट्रिंग लौटाएगा।

लेकिन अक्सर आप HTML सामग्री से अधिक चाहते हैं।

जैसे HTTP रिस्पांस स्टेटस।

रिस्पांस स्टेटस के बिना आप नहीं जानते कि आपकी रिक्वेस्ट सफल रही या विफल।

यहां बताया गया है कि इसे कैसे प्राप्त करें:

 response = Net::HTTP.get_response('example.com', '/') response.code # 200 

अब यदि आप रिस्पांस कंटेंट चाहते हैं तो आप body मेथड कॉल करते हैं:

 response.body 

HTTParty जेम का उपयोग कैसे करें

कई जेम्स हैं जो आपके लिए चीजों को आसान बना सकते हैं।

इन जेम्स में से एक है httparty।

यहां इसका उपयोग कैसे करें:

 require 'httparty' response = HTTParty.get('https://example.com') response.code # 200 response.body # ... 

HTTP जेम का उपयोग करने के लाभ:

  • यह उपयोग करने में आसान है।
  • कोई अलग get_response मेथड नहीं है, get पहले से ही आपको एक रिस्पांस ऑब्जेक्ट देता है।
  • जैसा कि आप अगले भाग में देखेंगे वे SSL रिक्वेस्ट्स को पारदर्शी बनाते हैं

SSL रिक्वेस्ट्स भेजना

यदि आप net/http के साथ SSL रिक्वेस्ट भेजने का प्रयास करते हैं:

 Net::HTTP.get_response("example.com", "/", 443) 

आपको मिलता है:

 Errno::ECONNRESET: Connection reset by peer 

आपको इसके बजाय यह करना होगा:

 net = Net::HTTP.new("example.com", 443) net.use_ssl = true net.get_response("/") 

अपना कुछ काम बचाएं और जेम का उपयोग करें 🙂

POST रिक्वेस्ट के साथ डेटा कैसे सबमिट करें

GET रिक्वेस्ट का उपयोग जानकारी का अनुरोध करने के लिए किया जाता है।

जैसे इमेज, CSS, जावास्क्रिप्ट डाउनलोड करना...

लेकिन यदि आप जानकारी सबमिट करना चाहते हैं तो POST रिक्वेस्ट का उपयोग करें।

यहां एक उदाहरण है:

 HTTParty.post("https://example.com/login", body: { user: "test@example.com", password: "chunky_bacon" }) 

फाइल अपलोड करने के लिए आपको एक मल्टीपार्ट रिक्वेस्ट की आवश्यकता होगी, जो HTTParty द्वारा समर्थित नहीं है।

आप rest-client जेम का उपयोग कर सकते हैं:

 require 'rest-client' RestClient.post '/profile', file: File.new('photo.jpg', 'rb') 

या Faraday जेम:

 require 'faraday' conn = Faraday.new do |f| f.request :multipart f.request :url_encoded f.adapter :net_http end file_io = Faraday::UploadIO.new('photo.jpg', 'image/jpeg') conn.post('https://example.com/profile', file: file_io) 

कस्टम HTTP हेडर्स कैसे भेजें

आप HTTP रिक्वेस्ट के साथ कस्टम हेडर्स भेज सकते हैं।

यह आपको अपनी रिक्वेस्ट के साथ अतिरिक्त डेटा भेजने में मदद करता है, जिसमें शामिल हैं:

  • कुकीज़
  • User-agent
  • कैशिंग प्राथमिकताएं
  • Content-type
  • Accept (JSON वापस पाने के लिए, या कुछ और)

यहां कैसे:

 Faraday.new('https://example.com', headers: { 'User-Agent' => 'test' }).get 

मैं एक Faraday ऑब्जेक्ट बना रहा हूँ ( new का उपयोग करके), फिर उस पर get कॉल कर रहा हूँ।

या आप ऐसा कुछ कर सकते हैं:

 Faraday.post( "https://example.com/login/oauth/access_token", URI.encode_www_form( code: params[:code], client_id: ENV["example_client_id"], client_secret: ENV["example_client_secret"], ), { "Content-Type" => "application/x-www-form-urlencoded", "Accept" => "application/json" } ) 

जो OAuth टाइप की रिक्वेस्ट्स के लिए बहुत अच्छा काम करता है।

सर्वश्रेष्ठ Ruby HTTP क्लाइंट चुनना

Ruby में कई HTTP क्लाइंट्स उपलब्ध हैं।

लेकिन आपको कौन सा चुनना चाहिए?

इस निर्णय लेने में आपकी मदद करने के लिए मैंने आपके लिए एक तुलना तालिका तैयार की है।

यह रही:

REPO STARS RECENT_COMMIT_COUNT LAST_COMMIT LATEST_RELEASE CREATED_DATE
lostisland/faraday 4817 26 2020-07-09 09:43:09 2020-03-29 13:46:47 2009-12-10 17:14:55
rest-client/rest-client 4913 0 2019-08-25 21:41:17 2019-08-21 22:50:21 2009-12-07 19:34:29
typhoeus/typhoeus 3739 2 2020-05-17 19:33:54 2020-01-15 16:24:17 2009-02-18 23:14:50
jnunemaker/httparty 5220 11 2020-06-10 18:40:13 2020-06-10 18:40:13 2008-07-28 20:55:11
excon/excon 1018 14 2020-06-30 11:30:12 2020-06-17 12:07:02 2009-10-25 17:50:46
httprb/http 2623 13 2020-03-30 12:34:38 2020-02-26 17:33:37 2011-10-06 04:19:10

लोकप्रियता और इन जेम्स को कितनी अच्छी तरह से बनाए रखा जाता है, इसे देखना सभी विकल्पों का मूल्यांकन करने में एक अच्छा पहला कदम है।

लेकिन उनके बीच तकनीकी अंतर क्या हैं?

इनमें से कई जेम्स net/http लाइब्रेरी के चारों ओर रैपर हैं:

  • excon
  • httparty
  • rest client

जबकि Faraday एक एडाप्टर जेम है, यह विभिन्न कार्यान्वयनों का उपयोग कर सकता है।

और Typhoeus C libcurl लाइब्रेरी के चारों ओर एक रैपर है।

मल्टी-थ्रेडिंग के लिए Typhoeus

Typhoeus बिना किसी समवर्ती कोड लिखे समवर्ती रिक्वेस्ट्स का समर्थन करता है।

यह Typhoeus को सबसे अच्छा विकल्प बनाता है यदि आप अपने रिक्वेस्ट्स प्रति सेकंड को अधिकतम करना चाहते हैं।

Typhoeus का उपयोग मल्टी-थ्रेडिंग के साथ करने के लिए:

 require 'typhoeus' hydra = Typhoeus::Hydra.hydra request = Typhoeus::Request.new("https://www.rubyguides.com") hydra.queue(request) hydra.queue(request) hydra.run 

अनुकूलता के लिए Faraday जेम

Faraday आपको net/http से Typhoeus, या यहां तक कि rest-client तक सभी को एक ही इंटरफेस से चुनने की अनुमति देता है।

यह net/http को डिफ़ॉल्ट करता है, लेकिन आप इसे इस तरह बदल सकते हैं:

 Faraday.default_adapter = :typhoeus 

Faraday के बारे में एक और दिलचस्प बात यह है कि यह मिडलवेयर का समर्थन करता है।

मिडलवेयर एक प्लगइन की तरह है जो आपको रिक्वेस्ट या रिस्पांस को एक विशिष्ट तरीके से संशोधित करने में मदद करता है।

उदाहरण:

 require 'faraday_middleware' client = Faraday.new do |f| f.response :json f.adapter :net_http end client.get('https://api.github.com/repos/vmg/redcarpet/issues') 

यह मिडलवेयर रिस्पांस को स्वचालित रूप से JSON के रूप में पार्स करेगा।

यदि आप इसे पार्स करने के बजाय JSON भेजना चाहते हैं, तो f.response :json के बजाय f.request :json का उपयोग करें।

Faraday वीडियो

बोनस: अपने HTTP रिक्वेस्ट्स को कैसे डीबग करें

यदि आप वास्तव में देखना चाहते हैं कि आपका कोड क्या भेज रहा है ताकि आप सुनिश्चित कर सकें कि यह सही ढंग से काम कर रहा है...

...तो मेरे पास आपके लिए एक अच्छी छोटी ट्रिक है।

आप इस वन-लाइनर का उपयोग कर सकते हैं:

 ruby -rsocket -e "trap('SIGINT') { exit }; Socket.tcp_server_loop(8080) { |s,_| puts s.readpartial(1024); puts; s.puts 'HTTP/1.1 200'; s.close } 

यह पोर्ट 8080 पर एक सर्वर बनाता है जो जो कुछ भी प्राप्त करता है उसे प्रिंट करता है, एक HTTP स्टेटस कोड लौटाता है और फिर कनेक्शन बंद कर देता है।

आप localhost:8080 के खिलाफ रिक्वेस्ट्स भेजकर उन्हें देख सकते हैं।

इस तरह:

 Faraday.new('https://localhost:8080', headers: { 'User-Agent' => 'test', 'foo' => '1234' }).get # GET / HTTP/1.1 # User-Agent: test # Foo: 1234 # Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3 # Accept: */* # Connection: close # Host: localhost:8080 

अन्य विकल्पों में httplog जैसे जेम का उपयोग करना, या mitmproxy जैसे टूल का उपयोग करना शामिल है।

सारांश

आपने सभी प्रकार के HTTP रिक्वेस्ट भेजना सीखा, बुनियादी GET जानकारी का अनुरोध करने के लिए, से POST जानकारी सबमिट करने के लिए रिक्वेस्ट तक।

आपने HTTP रिक्वेस्ट्स के साथ काम करने के लिए सबसे लोकप्रिय Ruby जेम्स का अवलोकन देखा। मेरा पसंदीदा faraday है क्योंकि यह जो लचीलापन प्रदान करता है, लेकिन बेझिझक दूसरा जेम चुनें यदि यह आपकी आवश्यकताओं के लिए बेहतर फिट बैठता है।

यदि आपको यह पोस्ट पसंद आया तो कृपया इसे अपने दोस्तों के साथ साझा करें ताकि वे भी इसका आनंद ले सकें 🙂

पढ़ने के लिए धन्यवाद!


  1. टाइम कॉम्प्लेक्सिटी में महारत: रूबी डेवलपर्स के लिए एक व्यापक गाइड टाइम कॉम्प्लेक्सिटी में महारत: रूबी डेवलपर्स के लिए एक व्यापक गाइड

    टाइम कॉम्प्लेक्सिटी कंप्यूटर साइंस से सीखने वाली सबसे दिलचस्प अवधारणाओं में से एक है, और इसे समझने के लिए आपको डिग्री की आवश्यकता नहीं है! यह दिलचस्प है क्योंकि यह आपको यह देखने में मदद करता है कि कोई विशेष एल्गोरिदम या प्रोग्राम धीमा क्यों हो सकता है और आप इसे तेज़ बनाने के लिए क्या कर सकते हैं। आप

  1. रूबी के Enumerable मॉड्यूल में महारत: एक व्यावहारिक गाइड + मेरा शीर्ष मेथड रूबी के Enumerable मॉड्यूल में महारत: एक व्यावहारिक गाइड + मेरा शीर्ष मेथड

    Enumerable क्या है? Enumerable पुनरावृति मेथड्स का एक संग्रह है, एक रूबी मॉड्यूल, और रूबी को एक महान प्रोग्रामिंग भाषा बनाने का एक बड़ा हिस्सा। Enumerable में सहायक मेथड्स शामिल हैं जैसे: map select inject Enumerable मेथड्स उन्हें एक ब्लॉक देकर काम करते हैं। उस ब्लॉक में आप उन्हें बताते हैं कि आप

  1. मैक पर Android Messages का उपयोग कैसे करें: पूर्ण चरण-दर-चरण गाइड मैक पर Android Messages का उपयोग कैसे करें: पूर्ण चरण-दर-चरण गाइड

    मैक पर Android Messages? असंभव लगता है, है ना? दो ब्रांडों के बीच प्रतिस्पर्धा भयंकर होने के कारण, अधिकांश लोग सोचते हैं कि Android और Mac एक साथ काम नहीं करेंगे। हालांकि, चूंकि Google यूजर्स के लिए बातचीत को सुविधाजनक और लचीला बनाना चाहता है, उन्होंने Android Messages विकसित किया है। इस मैसेजिंग प