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
HTTPartyGemの使用方法
物事を簡単にすることができる多くの宝石があります。
これらの宝石の1つはhttpartyです。
使用方法は次のとおりです :
require 'httparty' response = HTTParty.get('https://example.com') response.code # 200 response.body # ...
HTTP gemを使用する利点:
- 使いやすいです。
- 個別の
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、javascriptをダウンロードするように…
ただし、情報を送信する場合はPOSTリクエストを使用してください 。
次に例を示します:
HTTParty.post("https://example.com/login", body: { user: "[email protected]", password: "chunky_bacon" })
ファイルをアップロードするには、マルチパートリクエストが必要です 、HTTPartyではサポートされていません。
残りのクライアントgemを使用できます:
require 'rest-client' RestClient.post '/profile', file: File.new('photo.jpg', 'rb')
またはファラデーの宝石:
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リクエストでカスタムヘッダーを送信できます。
これは、リクエストとともに追加のデータを送信するのに役立ちます 、含む:
- クッキー
- ユーザーエージェント
- キャッシュ設定
- コンテンツタイプ
- 承諾(JSONを取り戻すなど)
方法は次のとおりです。
Faraday.new('https://example.com', headers: { 'User-Agent' => 'test' }).get
ファラデーオブジェクトを作成しています(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タイプのリクエストに最適です。
最高のRubyHTTPクライアントの選択
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 |
人気とこれらの宝石がどれだけよく維持されているかを調べることは、すべてのオプションを評価するための良い第一歩です。
しかし、それらの技術的な違いは何ですか?
これらの宝石の多くは、ネット/httpライブラリのラッパーです。 :
- excon
- httparty
- 残りのクライアント
Faradayはアダプターの宝石ですが、さまざまな実装を使用できます。
そして、TyphoeusはClibcurlライブラリのラッパーです。
マルチスレッド用のTyphoeus
Typhoeusは、同時コードを記述せずに同時リクエストをサポートします。
これにより、1秒あたりのリクエスト数を最大化する場合は、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を使用すると、net / httpからTyphoeus、さらにはrest-clientまですべて同じインターフェースからの実装を選択できます。 。
デフォルトはnet/httpですが、次のように変更できます:
Faraday.default_adapter = :typhoeus
ファラデーのもう1つの興味深い点は、ミドルウェアをサポートしていることです。
ミドルウェアは、特定の方法で要求または応答を変更するのに役立つプラグインのようなものです。
例 :
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.request :json
を使用します f.response :json
の代わりに 。
ファラデービデオ
ボーナス: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などのgemやmitmproxyなどのツールの使用が含まれます。
概要
基本的なGETで情報をリクエストするから始めて、あらゆる種類のHTTPリクエストを送信する方法を学びました。 、情報を送信するPOSTリクエスト 。
HTTPリクエストを処理するための最も人気のあるRubygemの概要を見てきました。私のお気に入りはfaraday
です 柔軟性があるためですが、ニーズに合っている場合は、別の宝石を自由に選択してください。
この投稿を楽しんだら、友達と共有して、友達も楽しんでください🙂
読んでくれてありがとう!
-
Ruby Enumerable Moduleの基本ガイド(+私のお気に入りの方法)
列挙可能とは何ですか? 列挙可能は反復法のコレクションです 、Rubyモジュール、そしてRubyを優れたプログラミング言語にする大きな部分です。 列挙可能には次のような便利なメソッドが含まれます : マップ 選択 注入 列挙可能なメソッドは、ブロックを与えることで機能します。 そのブロックで、すべての要素で何をしたいのかを伝えます。 例 : [1,2,3].map { |n| n * 2 } すべての数値が2倍になった新しい配列を提供します。 正確に何が起こるかは、使用する方法、 mapによって異なります。 すべての値を変換するのに役立ちます、 select リス
-
Mac上のAndroidメッセージの究極のガイド
Mac 上の Android メッセージ ?不可能に聞こえますよね? 2 つのブランド間の競争が激しいため、ほとんどの人は Android と Mac は連携しないと考えています。ただし、Google は会話をユーザーにとって便利で柔軟なものにしたいと考えているため、Android Messages を開発しました。 このメッセージング プラットフォームは、PC デバイスと Mac デバイスの両方で使用できます。したがって、Mac コンピューターをお持ちの場合は、使用するのが難しくないので心配する必要はありません。 Android メッセージは複数のデバイスで互換性があるため、さまざま