রেলের উপর রুবি ব্যবহার করে কীভাবে এইচটিটিপি অনুরোধ করবেন?


235

আমি অন্য ওয়েবসাইট থেকে তথ্য নিতে চাই। অতএব (সম্ভবত) আমার উচিত সেই ওয়েবসাইটটিতে একটি অনুরোধ করা (আমার ক্ষেত্রে এইচটিটিপি জিইটি অনুরোধ) এবং প্রতিক্রিয়াটি গ্রহণ করা উচিত।

আমি কীভাবে এটি রুবেলে রেলগুলিতে তৈরি করতে পারি?

যদি এটি সম্ভব হয়, তবে এটি আমার নিয়ামকগুলিতে ব্যবহার করার জন্য সঠিক পন্থা?

উত্তর:


329

আপনি রুবির Net::HTTPক্লাস ব্যবহার করতে পারেন :

require 'net/http'

url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}
puts res.body

1
এখানে 'রেক' এর অর্থ কী?
ষাট

18
এর অর্থ অনুরোধ
আর্থার কলি

1
দেখে মনে হচ্ছে এটি একটি ব্লক করার অনুরোধ হতে পারে, তাই না?
স্কট আইজেনবার্গ

এপি চাবি কোথায় রাখব?
ব্যবহারকারী 1735921

1
শুধু যোগ যে www। প্রয়োজনীয় হওয়া উচিত নয়, এটি সাধারণত হয় না।
জ্যাকহাসা কীবোর্ড

111

নেট :: এইচটিটিপি রুবিতে নির্মিত, তবে আসুন আমরা এটির মুখোমুখি হই, প্রায়শই এটির 1980 এর দশকের জটিলটি স্টাইলটি ব্যবহার না করা এবং উচ্চ স্তরের বিকল্পের চেষ্টা করা সহজ :


4
বা অ্যাকটিভ রিসোর্স, যা রেলের সাথে আসে!
মার্নেন লাইবো-কোসার

8
আমি এটি করার বিরুদ্ধে সতর্কতা অবলম্বন করতে চাই কারণ আপনি আপনার রেল অ্যাপ্লিকেশনে আরও নির্ভরতা যুক্ত করবেন। আরও নির্ভরতা মানে আরও মেমরি খরচ এবং সম্ভাব্য বৃহত্তর আক্রমণ পৃষ্ঠ। ব্যবহার Net::HTTPকরা অসুবিধাজনক তবে বাণিজ্য বন্ধ করার পক্ষে এটি উপযুক্ত নয়।
জেসন ইয়াও

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। প্রোগ্রাম যখন আপনি কেবল প্রচুর রত্ন ইনস্টল করতে পারেন কেন?
omikes

5
@ জেসনইয়েও দৃ়ভাবে একমত নয়। নির্ভরতা প্রবর্তনের অর্থ আপনি চক্রটি পুনরায় উদ্ভাবন করবেন না এবং অন্যরা ইতিমধ্যে যে পরিশ্রম করেছে তার দ্বারা আপনি উপকৃত হন। যদি কোনও রত্ন উপস্থিত থাকে যা আপনার জীবনকে সহজ করে তোলে তবে সাধারণত এটি ব্যবহার না করার কোনও উপযুক্ত কারণ নেই।
মার্নেন লাইবো-কোসার

1
@ জেসনইয়েও বামপ্যাড কাহিনীটি কেবল ঘটেছে কারণ এনপিএম তার সংগ্রহস্থলটি খারাপভাবে চালিয়েছিল এবং লেখককে তার সমস্ত প্যাকেজ মুছতে দিন। সঠিকভাবে পরিচালিত প্যাকেজ রেপোগুলি এটি করে না (এবং যাইহোক, এটি ওএসএস, যাতে আপনি চাইলে সহজেই আয়না করতে পারেন)। এটি হ'ল, বামপ্যাড কাহিনী সাধারণভাবে নির্ভরতা প্রবর্তনের বিরুদ্ধে যুক্তি নয়, বরং রেপোকে খারাপভাবে পরিচালনার বিরুদ্ধে। আমি আপনার অন্য বিষয়টির সাথে একমত নই, যে একটি বৃহত নির্ভরতা যা আপনার প্রয়োজনের চেয়ে বেশি করে দেয় তা সরবরাহ করা মানের জন্য ওভারকিল হতে পারে।
মার্নেন লাইবো-কোসার

92

ওপেনউরি সেরা; এটা যেমন সহজ

require 'open-uri'
response = open('http://example.com').read

10
সতর্ক করা গুরুত্বপূর্ণ, এটি open-uriপুনঃনির্দেশগুলি অনুসরণ করবে না।
ইয়াগুয়ার

3
@ ইয়াগুয়ার যা দুর্দান্ত, দূষিত পুনর্নির্দেশগুলি যেমনfile:///etc/passwd
জার্টাস

1
দয়া করে মনে রাখবেন, এটি সংযোগটি বন্ধ করবে না। স্ট্যাকওভারফ্লো.com
শকওয়েভএনএন


13

আমি নেট :: HTTP এর চেয়ে httpclient পছন্দ করি

client = HTTPClient.new
puts client.get_content('http://www.example.com/index.html')

আপনি যদি কোনও ক্লাস তৈরি করে থাকেন যা কোনও পরিষেবার জন্য ক্লায়েন্ট থাকে তবে এইচটিটিপিটি একটি ভাল পছন্দ। এটি একটি সুবিধাজনক মিশ্রণ যা আপনাকে যা প্রয়োজন তার 90% দেয়। গুগল এবং টুইটার ক্লায়েন্টগুলির উদাহরণগুলিতে কত সংক্ষিপ্ত তা দেখুন ।

এবং আপনার দ্বিতীয় প্রশ্নের উত্তর দেওয়ার জন্য: না, আমি এই কার্যকারিতাটি একটি নিয়ামকের মধ্যে রাখব না - আমি সম্ভাব্য বিবরণগুলি (সম্ভবত HTTParty ব্যবহার করে) সজ্জিত করার পরিবর্তে একটি মডেল ব্যবহার করতাম এবং কেবল এটি নিয়ামক থেকে কল করতাম call


এবং ইউআরএলে নিরাপদে পরামিতিগুলি কীভাবে পাস করা সম্ভব? যেমন: http: //www.example.com/index.html? Param1 = test1 & param2 = test2। তারপরে আমাকে অন্য ওয়েবসাইটের প্যারামিটারগুলি থেকে পড়তে হবে এবং প্রতিক্রিয়াটি প্রস্তুত করতে হবে। তবে আমি কীভাবে পরামিতি পড়তে পারি?
ব্যবহারকারী 502052

আপনার অর্থ কী, আপনাকে অন্য ওয়েবসাইটের পরামিতিগুলি পড়তে হবে? কীভাবে তা কীভাবে সম্ভব হবে? আপনি কি অর্জন করার চেষ্টা করছেন?
মার্নেন লাইবো-কোসার

8

আমার প্রিয় দুই URL গুলির বিষয়বস্তু দখল করার উপায় পারেন হয় OpenURI বা Typhoeus

ওপেনুরি কারণ এটি সর্বত্র এবং টাইফিয়াস কারণ এটি অত্যন্ত নমনীয় এবং শক্তিশালী।


8

আপনি যদি প্রক্সিটির পিছনে একটি REST এপি কল করতে থাকেন তবে এখানে কোডটি কার্যকর হয়:

require "uri"
require 'net/http'

proxy_host = '<proxy addr>'
proxy_port = '<proxy_port>'
proxy_user = '<username>'
proxy_pass = '<password>'

uri = URI.parse("https://saucelabs.com:80/rest/v1/users/<username>")
proxy = Net::HTTP::Proxy(proxy_host, proxy_port, proxy_user, proxy_pass)

req = Net::HTTP::Get.new(uri.path)
req.basic_auth(<sauce_username>,<sauce_password>)

result = proxy.start(uri.host,uri.port) do |http|
http.request(req)
end

puts result.body
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.