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

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

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

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

Q&A

解決済

1回答

1572閲覧

Ruby net/http postでパスワード自動入力(デバッグツール見かたも)

kazuyakazuya

総合スコア193

Ruby

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

0グッド

0クリップ

投稿2019/08/02 10:04

Rubyのnet/httpで自動的にパスワードを入力してくれるプログラムを作りたいです。
以下のように

teratailログインページへアクセス
イメージ説明
まるで囲っている場所
イメージ説明
上記の

formに対して自動でパスワードをセットし
それをサーバーに送ってレスポンスを取得したいです。

まず、chromeのデバッグツールを使って
メールアドレスとパスワードがどのようにリクエストされているのかを
確認しました。
イメージ説明
見にくいですがForm_dataとあります。

質問1
Form_DataにあるのはHTTPリクエストの構造で
いうところの ボディ(エンティティボディ) でしょうか?

質問1があっているのなら
サーバーに対してPOSTで送り
POSTの中のエンティティボディの中に

_method: POST data[_Token][key]: 93d86e4f446949f872e373b6eeac6c72e1fe3adee2b0ae76a31928c315468b0c81792a677c910e35f612efe30c3aea2d70d3a8954f04fcc64ac6c52a8ed000ee data[User][mail_address]: matsu-kazu4@ezweb.ne.jp data[User][password]: sample data[_Token][fields]: 89bbcd135ed84feb1e7b6f3b060adbe5d125e754%3A data[_Token][unlocked]:

デバッグツールで見たエンティティボディをセットすればよいのだから

ruby

1require 'net/http' 2 3http = Net::HTTP.new("teratail.com",443) 4http.use_ssl = true #SSL通信をするためのもの これが原因ではない 5http.verify_mode = OpenSSL::SSL::VERIFY_NONE#SSL通信をするためのもの これが原因ではない 6 7request = Net::HTTP::Post.new("/login/request") 8request.body=("_method: POST 9data[_Token][key]: 93d86e4f446949f872e373b6eeac6c72e1fe3adee2b0ae76a31928c315468b0c81792a677c910e35f612efe30c3aea2d70d3a8954f04fcc64ac6c52a8ed000ee 10data[User][mail_address]: matsu-kazu4@ezweb.ne.jp 11data[User][password]: sample 12data[_Token][fields]: 89bbcd135ed84feb1e7b6f3b060adbe5d125e754%3A 13data[_Token][unlocked]:") 14 15response = http.request(request) 16puts response.code 17

上記のようなコードを作り実行したのですが
コマンドに何も出力されません。

ここであやしいのが

ruby

1request.body=("_method: POST 2data[_Token][key]: 93d86e4f446949f872e373b6eeac6c72e1fe3adee2b0ae76a31928c315468b0c81792a677c910e35f612efe30c3aea2d70d3a8954f04fcc64ac6c52a8ed000ee 3data[User][mail_address]: matsu-kazu4@ezweb.ne.jp 4data[User][password]: sample 5data[_Token][fields]: 89bbcd135ed84feb1e7b6f3b060adbe5d125e754%3A 6data[_Token][unlocked]:")

body=メソッドです。
body=(Net::HTTP::Postクラス)

![イメージ説明

サーバーに送るリクエストのエンティティボディを文字列で設定する

と書かれていますが
使い方が間違えているのでしょうか?

分からないのでお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ブラウザのデバッグツールの表示は、人間にわかりやすく編集した結果であって、送信しているデータではありません。

1.POSTデータの通信の仕方を学ぶ
2.HTMLのFORMタグの中のINPUTタグを見て、送るべきデータを決める
もしくはデバッグツールの表示を見て、実際に送る形式に組み立て直す

という流れでやってください。

投稿2019/08/02 11:33

otn

総合スコア84505

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

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

otn

2019/08/02 11:47

質問の前提として、専用のメソッドを使わずに自分でデータを組み立てたいという意図だと思っています。違ったらコメントしてください。
kazuyakazuya

2019/08/02 13:13 編集

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問