- ベストアンサー
完璧にCookieを取得する方法
- RubyのCookie情報取得について質問です。取得できるサイトとできないサイトの違いと取得する方法について教えてください。
- 質問者は現在、特定のコードを使用してCookie情報を取得しようとしていますが、一部のサイトでは取得できないとしています。この問題の原因と解決策を教えてください。
- 具体的な例として、「http://auctions.yahoo.co.jp/」のCookie情報は取得できないが、ChromeブラウザのEditCookieで確認すると複数のCookieが存在することがわかっています。この問題の原因と一般的な解決策について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ああ、なるほど。 私はこのサイトのソースを3分しか見ていないので 見落としがあるかもしれませんが、 このサイトはCookieをJavascriptで発行していますね。 ブラウザであればJavascriptが動作しますが、 Rubyでブラウザがわりのことをしようと思ったら、 Javascriptを独自に解析しないといけません。 この場合、セッションのキーがCookieで発行されていなければ、 そのままCookieで送っている情報をRubyで送ればOKなことが多いです。 Cookieの送信の仕方は、下記のサイトに記述があります。 http://d.hatena.ne.jp/mzp/20070216/cookie
その他の回答 (3)
- mozomozo123
- ベストアンサー率27% (59/214)
えーと。。。。 まだ説明が良くわからないのですが、RubyでProxyを作りたいのでしょうか? これであれば答えは先ほどと同じでできないになります。 単純にauctions.yahoo.co.jpからCookieがないと言う質問であれば、 http://auctions.yahoo.co.jpにアクセスしてもCookieは発行されていないので、Nilが正解です。 この辺はFireFoxのLive HTTP HEADERSなどで生の情報を確認しましょう。 また、基本的にヤフオクなどはSSLで暗号化した通信を行うので、 HTTPで通信するだけでは機能的に実現できないことが多いです。 HTTPS通信を利用し、セッションのCookieの一時保管等が必要になるところもあります。 私も昔Perlで作ったことがありますが(証券系のWebサイトに自分のIDでログインし自動的に株価情報を取得し解析する)、ハードルは結構高いです。 少なくてもJavascriptでCookieの操作(IEのアドレスから動かすことが可能です。 たとえばjavascript:alert(document.cookie)とIEのアドレスに入れてみましょう。)、 HTTP_HEADERの解析、Cookieの解析とCookieの改造する知識。 この程度は自分でできるようにならないと厳しいですよ。
補足
当初したかったことは、下記サイトの内容です。 http://d.hatena.ne.jp/mzp/20070216/cookie 上記サイトのやり方で受信が可能なサイトと不可能なサイトがあるので、悩んでいたのです。 もっと言ってしまうと、下記サイトにアクセスし以下の流れを実行したかったのです。 http://www.cardbotmtgo.com/ このサイトはトレーディングカードの価格を表示するサイトです。 1.サイト内の Cookie "Deck" の値をこちらで設定(例えば Abandon Hope という名前のカードの値段を知りたい場合は "deck=Abandon%20Hope%28TE%23107%29" としたい) 2.こちらで設定した Cookie を送信 3.新たに取得したHTMLから、内容をスクレイピング という感じです。 しかし FireFox の Live HTTP Headers 及び GoogleChrome の chrome://net-internals/ で調べたところ、このサイトも Set-Cookie がありませんでした。 その代わり、GET のところで "Cookie: listBox-setFilter=ALL%20SETS; listBox-rarityFilter=ALL%20RARITIES; deck=Abandon%20Hope%28TE%23107%29" という表示があったので、そこのところの処理を Ruby でうまくできないかと考えています。 再度質問の確認に戻りますが、知りたいことは ・Cookie は存在するのに Set-Cookie が存在しない意味 ・Cookie を送信する方法 です。 mozomozo123さんが仰るように Ruby ではできないのであれば、他の言語で試してみたいと思います。 その際に最適の言語、それからお勧めの書籍を教えていただければ幸いです。
実際に試してないので全く見当はずれかも知れませんが……。 auctions.yahoo.co.jpということでふと思ったのですが、それらのクッキーは、ひょっとしてHTTPSアクセスで利用されるのではありませんか。HTTPSアクセスでのクッキーにはSecure属性が設定され、HTTPからは見ることができなくなりますので。
補足
ご回答ありがとうございます。 HTTPS アクセス時は、 require 'net/https' を使用した別のコードが必要になるんですね。 色々調べることができました。ありがとうございます。
- mozomozo123
- ベストアンサー率27% (59/214)
取得できるわけないでしょ。 仮に銀行のCookieを読み取れるってことは、そのURIを踏めば、 誰のでも自由に銀行口座を操作することが可能になるってことですよ。 Cookieの概念を理解するように。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1021413205 そんなん読み取れたら脆弱性でブラウザに問題あり。
補足
説明足らずで申し訳ありません。 Cookie の情報というのは、他人のものではありません。 最終的にしたいことは、Cookie に指定した値を入力して送信したいということです。 そのためのとっかかり(Cookie の受信)ができないので困っています。
お礼
仰るとおり、Javascript による Cookie の処理でした。 Ruby の Net::HTTP では動作しないためにこのような状況になったのですね。 Net::HTTP による Cookie の送信も効果がありませんでしたので、 Watir を利用して処理しようと思います。 色々勉強になりました。 ありがとうございます。