注意長文
いろいろ質問して
キーワードを検索欄に入れてそのレスポンスを取得するプログラムを作って
完成したと思っていたのですが
(ステータスライン200が返ってくるため)
実際にエンティティヘッダーを取得し、正規表現で検証したところ
ただただ "/"このパスのレスポンスを取得していただけだとわかりました。
前回はアマゾンで試したのですが
利用規約が怪しいとのことで
今回はteratailで検証します。
(見た限りでは利用規約に問題なし。ステータスコードも200を取得できる)
利用規約
まずやりたいこと
teratailのルートパスにアクセス
上記に検索欄があります。
検索欄にいれるキーワードをプログラムコードから指定して
その結果を受け取りたいです。
例
ruby と検索すると上記の画面(html)が返される。
無論、Net::HTTPのGETメソッドで直接URLを指定すれば
写せるかもしれないが、自分はあくまで
POSTメソッドでやりたいのです。
(つまり、プログラムコードで検索欄のキーワードを指定したい)
以下が自分が作ったコードです。
ruby
1require 'net/http' 2require 'uri' 3http= Net::HTTP.new("teratail.com",443) 4http.use_ssl = true 5http.verify_mode = OpenSSL::SSL::VERIFY_NONE 6response = http.post('/','q=ruby') 7puts "---ステータスコード---" 8puts response.code 9response.each do |name,value| 10 puts name + ":" + value 11end 12puts response.body
↓
cmd
1---ステータスコード--- 2200 3server:nginx/1.13.12 4date:Tue, 23 Jul 2019 14:15:15 GMT 5content-type:text/html; charset=UTF-8 6x-frame-options:SAMEORIGN 7set-cookie:tt_stc=9da7f8196697063dfea5746f84810ea8; expires=Mon, 21-Oct-2019 14:15:15 GMT; Max-Age=7776000; path=/, tt_sec=b6f41d0c853acec053cfc84d2b05e04e; path=/, DSID=205b3db69808c2373b462eef9ba48705; expires=Tue, 23-Jul-2019 18:15:15 GMT; Max-Age=14400; path=/; HttpOnly, tt_rpd=Errors_error404; path=/, tt_stc=9da7f8196697063dfea5746f84810ea8; expires=Mon, 21-Oct-2019 14:15:15 GMT; Max-Age=7776000; path=/, tt_stc=dd18fad7a735dcddbd26d623f8c6baae; expires=Mon, 21-Oct-2019 14:15:15 GMT; Max-Age=7776000; path=/, tt_sec=0066e921f7ede281b79234384aeca841; path=/, CakeCookie[hFd7M1i8]=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; HttpOnly, Cookies[uniqid]=Q2FrZQ%3D%3D.iiddLbrlw0vzdDe2sDptKtJd2tWkXijQDUVPA3IUqRo%3D; path=/; secure; HttpOnly, Cookies[referer]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[referer_host]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[sip]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[url_query]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[ab]=Q2FrZQ%3D%3D.iQ%3D%3D; expires=Sun, 19-Jan-2020 14:15:15 GMT; Max-Age=15552000; path=/; secure; HttpOnly 8accept-ranges:none 9vary:Accept-Encoding 10via:1.1 google 11alt-svc:clear 12connection:close 13transfer-encoding:chunked
となります。一見成功しているように見えますが
htmlを見るとただただ"/"このパスに飛ばされているだけだとわかります。
(htmlは出力結果があまりに大きすぎるため省略)
なにが原因はどこ(何のメソッドなのか)なのか?それはわかっているのです。
ただ、そのメドッドをいろいろいじってみても不明点が多いため
教えてください。
原因はたぶんこれです。
ruby
1response = http.post('/','q=ruby')
リファレンス
postメソッド
上記の画像の通りなら
ruby
1post(第一引数にパスを指定、第二引数に送りたいもの検索キーワード)
よって
teratailの検索キーワードを打つ画面のパスは(ここでは)
"/"
だから指定するパスは"/"
url
1https://teratail.com/search?q=ruby
検索欄にrubyと打ち込んで実行した後のURLはこうなっていることから
第二引数に送りたいもの検索キーワードはq=ruby
(いろいろなパターンを試したがだめだった)
よって
ruby
1response = http.post('/','q=ruby')
だからこうなると思っていたのですが
実行すると上の通り
返ってくるのはコレ(検索後)ではなく
コレ(検索前)。。。
やってみたこと
ruby
1response = http.post('/','適当に入れる')
第二引数(検索キーワードを入れたいところ)
に適当に値を入れて実行しました。
エラーが起きると思いきや
ruby
1---ステータスコード--- 2200 3server:nginx/1.13.12 4date:Tue, 23 Jul 2019 14:40:04 GMT 5content-type:text/html; charset=UTF-8 6x-frame-options:SAMEORIGN 7set-cookie:tt_stc=50250ef4e82c4aa68ecd4164dfc0b53d; expires=Mon, 21-Oct-2019 14:40:04 GMT; Max-Age=7776000; path=/, tt_sec=0639f1781f50367ba75dea147aee1392; path=/, DSID=2d5fb2c15bfe73aa9a703825eab68478; expires=Tue, 23-Jul-2019 18:40:04 GMT; Max-Age=14400; path=/; HttpOnly, tt_rpd=top; path=/, tt_stc=50250ef4e82c4aa68ecd4164dfc0b53d; expires=Mon, 21-Oct-2019 14:40:04 GMT; Max-Age=7776000; path=/, CakeCookie[hFd7M1i8]=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; HttpOnly, Cookies[uniqid]=Q2FrZQ%3D%3D.jCBdLri3xhmiJT6xsTpsfoEFjofxCnWHWEUbVHZA%2FEw%3D; path=/; secure; HttpOnly, Cookies[referer]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[referer_host]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[sip]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[url_query]=Q2FrZQ%3D%3D.; path=/; secure; HttpOnly, Cookies[btn]=Q2FrZQ%3D%3D.nCwYQa7whkqx; path=/; secure; HttpOnly, Cookies[ab]=Q2FrZQ%3D%3D.iQ%3D%3D; expires=Sun, 19-Jan-2020 14:40:04 GMT; Max-Age=15552000; path=/; secure; HttpOnly 8accept-ranges:none 9vary:Accept-Encoding 10via:1.1 google 11alt-svc:clear 12connection:close 13transfer-encoding:chunked
なにがいけないのかわかりません。
かれこれ5時間格闘してます。
わからないのでお願いします。
質問の要約(説明が長かったから)
1.。。
postの使い方は間違っていますか?正しい使い方を教えてください。
こういうpostの使い方を紹介しているサイトは1つあったのですが
そのコードも結果は同様でした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/24 00:16
2019/07/24 00:34
2019/07/24 00:36
2019/07/24 00:56