質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

9881閲覧

リクエストヘッダとパラメータを付与してPOSTでAPIにアクセスしたい(gem/httpclientを使用)

kotahayashi

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/07/10 03:27

前提・実現したいこと

Rubyのgem・httpclientを使用して、タイトルの通り、
リクエストヘッダとパラメータを追加した上でAPIにPOSTメソッドでアクセスしたいと考えています。

なお、他のgemを使用する等により確実に実行できる方法がございましたら、そちらでも構いません。

つまずいている箇所

httpclientのライブラリを参照しましたが解説が不十分で、どのメソッドをどのように使用すれば良いかわかりませんでした。
https://github.com/nahi/httpclient

該当のソースコード

Ruby

1 URL =2 USER =3 PASSWORD =4 5 def get_hoge 6 c = HTTPClient.new() 7 c.set_auth(URL, USER, PASSWORD) 8 res = c.post_content(URL, { 9 'HOGE' => "FUGA" 10 }) 11 res 12 end 13

リクエストヘッダのフィールド名:HOGE、値:FUGA に加えて、
パラメータとして hoge: fuga を付与してアクセスしたいと考えています。

試したこと

上記の通りpost_contentメソッドを使用してみましたが、
リクエストヘッダとパラメータを同時に記述する方法が分かりませんでした。

補足情報(FW/ツールのバージョンなど)

Railsのバージョン:5.2.0
httpclientのバージョン:2.8.3

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ドキュメントをきちんと読んでいないだけのように思えます。
内容はこれで十分でしょう。

https://github.com/nahi/httpclient には、
「See HTTPClient for documentation.」と書かれており、
ドキュメントへのリンクがあります。

例えば、HttpCliene#post_contentメソッドのドキュメントを見れば、
パラメータ(body)とヘッダ(header)の指定方法は明らかです。
https://www.rubydoc.info/gems/httpclient/HTTPClient#post_content-instance_method

body, headerを指定する例

ruby

1client = HTTPClient.new 2uri = 'http://...' 3params = { 4 a: 1, 5 b: 2 6} 7headers = { 8 'User-Agent' => 'Sample/RubyClient/1.0' 9} 10content = client.post_content(uri, body: params, header: headers)

postメソッドの例

ruby

1client = HTTPClient.new 2uri = 'http://...' 3params = { 4 a: 1, 5 b: 2 6} 7headers = { 8 'User-Agent' => 'Sample/RubyClient/1.0' 9} 10# postの戻り値はHTTP::Messageのインスタンス 11response = client.post(uri, body: params, header: headers) 12 13response.body => レスポンスボディ文字列 14response.status => HTTPステータス(200,400などの数値) 15response.headers => レスポンスヘッダのHash

投稿2018/07/10 03:42

編集2018/07/10 06:45
mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotahayashi

2018/07/10 05:23

ご回答くださりありがとうございます。 私が初心者である旨と、以下の旨を記述するべきでした。質問に不備があり申し訳ございません。 当然こちらのドキュメントを参照した上で、post_contentメソッドが使えるのではないかという判断に至りました。 しかし、bodyとheaderの記述方法が同じように見え、どのような形で併記すればそれぞれbody, headerとしてカスタムできるのか分かりませんでした。再度思案しましたが、まだ見当がつきません。 私の判断に自信がなかったことと、回答率をあげる等の点から抽象度を高めて質問をしましたが、このような形となりお手数をおかけしました。
mingos

2018/07/10 06:40 編集

今回の件では、post_contentのドキュメントURLを質問に明記して、内容が理解できないという事を簡潔に書いたほうが回答してもらいやすいと思います。 整理すると、post_contentのドキュメントにあるbody, headerの指定方法が分からないという事のようですので、回答にて例を示します。 なお、post_contentではresponse bodyだけを取得するメソッドなので汎用性が低いので、実用するならばpostを使うべきかなと思います。
kotahayashi

2018/07/13 09:11

別の部分にミスがあり検証に時間がかかってしまいましたが、お示しいただいたコードの書き方でアクセスできました。 質問のしかたについてもアドバイスいただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問