Https url- এর জন্য নেট :: HTTP.get ব্যবহার করা


85

আমি Net::HTTP.get()একটি https ইউআরএল ব্যবহার করার চেষ্টা করছি :

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

যাইহোক, ফলাফলগুলি মুদ্রণের চেষ্টা করার সময় আমি নিম্নলিখিত ফলাফলটি পাই:

ইউআরআই :: এইচটিটিপিএস স্ট্রিংয়ে রূপান্তর করতে পারে না

চুক্তিটি কি ছিল? আমি রুবি ১.৮..7 (ওএস এক্স) ব্যবহার করছি


কেবলমাত্র একটি এফওয়াইআই, আমরা অস্থায়ীভাবে একটি তৃতীয় পক্ষের সার্ভারের সাথে সংযুক্ত হয়েছি যাতে শংসাপত্রের সমস্যা ছিল তাই আমাদের IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )কেবল এসএসএল যাচাইকরণ অক্ষম করার জন্য ব্যবহার করতে হয়েছিল। আমাদের ক্ষেত্রে, সুরক্ষা কোনও সমস্যা ছিল না, সার্ভারটি আমাদের নিয়ন্ত্রণের বাইরে ছিল এবং এটি ছিল একটি অস্থায়ী সমাধান।
জোশুয়া পিন্টার

উত্তর:


156

আসল উত্তর:

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

7
আমি এটিকে উত্তর হিসাবে দেব কারণ এটি আমি যা চেয়েছিলাম তার উত্তর, তবে আসল উত্তরটি হ'ল আমি এটিকে ভুল উপায়ে পৌঁছাচ্ছি। URI.parse(uri_string).readপরিবর্তে ব্যবহার করুন , এত সুন্দর করে কাজ করে।
টনি স্টার্ক

4
কি VERIFY_NONEবোঝায়? পরিবর্তে সম্ভবত কি করা উচিত?
জোনাথন এলার্ড

4
এটি এমন একটি পতাকা যার অর্থ শংসাপত্রের সত্যতা উপেক্ষা করা হয়েছে, তবে এটি কিছুক্ষণ আগে ছিল তাই আপনার এটি সেট করার দরকার কেন আমি নিশ্চিত নই।
স্টেপ

4
@ ফ্রেবকাস, আপনার require 'open-uri'কাজের জন্য পড়তে হবে।
জোশ ডি

4
এসপিএস যাচাইকরণ পছন্দসই নয় বলে বোঝানোর জন্য ওপি-র প্রশ্নে কিছুই নেই, সুতরাং আপনি কেন VERIFY_NONE পরামর্শ দিচ্ছেন?
অ্যালেক্স

35

সম্পাদনা: আমার পদ্ধতির কাজ করে তবে @ জেসন-ইওর পদ্ধতির পক্ষে আরও সহজ।

এটি 2.1.2 হিসাবে প্রদর্শিত হয়েছে পছন্দের একটি নথিভুক্ত পদ্ধতি নিম্নরূপ (সরাসরি ডকুমেন্টেশনের উদ্ধৃতি ):

HTTPS একটি # HTTP সংযোগের জন্য # use_ssl = দ্বারা সক্ষম করা হয়েছে।

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 

রুবির পূর্ববর্তী সংস্করণগুলিতে আপনাকে এইচটিটিপিএস ব্যবহার করতে 'নেট / https' প্রয়োজন। এটি আর সত্য নয়।


7
এটি সত্য নয়। রুবি ২.০.০ হিসাবে, Net::HTTP.getইউআরআই অবজেক্টটি httpsইউআরএল পাস করা হলে একটি এইচটিটিপিএস অনুরোধ পাওয়ার জন্য যথেষ্ট । আমার উত্তর দেখুন: stackoverflow.com/a/36543895/382740
জেসন ইয়ো

19

রুবি ২.০.০ এবং তার উপরে, কোনও 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

এটি রুবি ২.০.০ এ এই কমিট দ্বারা প্রবর্তিত হয়েছিল ।

get_responseপদ্ধতি, যার দ্বারা বলা হয় Net::HTTP.getপদ্ধতি, সেট করে :use_ssl সত্যতে যখন uri.schemeহল "HTTPS"।

দাবি অস্বীকার: আমি বুঝতে পারি যে প্রশ্নটি রুবির ১.৮..7 এর জন্য, তবে যেহেতু কেউ যখন "https রুবি" অনুসন্ধান করে তখন এটি শীর্ষ কয়েকটি অনুসন্ধানের ফলাফলগুলির মধ্যে, আমি যাইহোক উত্তর দেওয়ার সিদ্ধান্ত নিয়েছি।


4
ডেটা পয়েন্ট হিসাবে, আমি এটি রুবি ২.২.১০ তে সত্য নয় বলে খুঁজে পেয়েছি। এটি 443 পোর্টটিতে সংযোগটি খোলে, তবে এসএসএল ব্যবহার করে না। অবশ্যই, বিদেশী সার্ভারটি এর সাথে কিছুই করার ছিল না, এবং কোনও উত্তর ছাড়াই সংযোগটি বন্ধ করে দিয়েছিল এবং আমার শেষদিকে দাঁত কষতে থাকে। http.use_ssl = trueএটিকে আসলে এসএসএল ব্যবহার করতে বাধ্য করার জন্য আমাকে কল করতে হয়েছিল এবং তারপরে জিনিসগুলি সাঁতার কাটতে শুরু করেছে।
ডেভিড হ্যাম্পি

4

এটি দেখতে হবে:

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

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

হাহা, ডান;) স্টিফ প্রদত্ত সমাধানটি নীচে দেখুন, এটি কাজ করা উচিত
ভ্লাদ খোমিচ

এটি হয় না, "অপরিজ্ঞাত পদ্ধতি` use_ssl = '"বলার সময় আমি একটি ত্রুটি পেয়েছি
টনি স্টার্ক

4
'নেট / https' এর প্রয়োজনও চেষ্টা করুন
ভ্লাদ খোমিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.