• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:完璧に Cookie 取得する方法)

完璧にCookieを取得する方法

このQ&Aのポイント
  • RubyのCookie情報取得について質問です。取得できるサイトとできないサイトの違いと取得する方法について教えてください。
  • 質問者は現在、特定のコードを使用してCookie情報を取得しようとしていますが、一部のサイトでは取得できないとしています。この問題の原因と解決策を教えてください。
  • 具体的な例として、「http://auctions.yahoo.co.jp/」のCookie情報は取得できないが、ChromeブラウザのEditCookieで確認すると複数のCookieが存在することがわかっています。この問題の原因と一般的な解決策について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

ああ、なるほど。 私はこのサイトのソースを3分しか見ていないので 見落としがあるかもしれませんが、 このサイトはCookieをJavascriptで発行していますね。 ブラウザであればJavascriptが動作しますが、 Rubyでブラウザがわりのことをしようと思ったら、 Javascriptを独自に解析しないといけません。 この場合、セッションのキーがCookieで発行されていなければ、 そのままCookieで送っている情報をRubyで送ればOKなことが多いです。 Cookieの送信の仕方は、下記のサイトに記述があります。 http://d.hatena.ne.jp/mzp/20070216/cookie

bosh1291
質問者

お礼

仰るとおり、Javascript による Cookie の処理でした。 Ruby の Net::HTTP では動作しないためにこのような状況になったのですね。 Net::HTTP による Cookie の送信も効果がありませんでしたので、 Watir を利用して処理しようと思います。 色々勉強になりました。 ありがとうございます。

その他の回答 (3)

回答No.3

えーと。。。。 まだ説明が良くわからないのですが、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の改造する知識。 この程度は自分でできるようにならないと厳しいですよ。

bosh1291
質問者

補足

当初したかったことは、下記サイトの内容です。 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 ではできないのであれば、他の言語で試してみたいと思います。 その際に最適の言語、それからお勧めの書籍を教えていただければ幸いです。

noname#177743
noname#177743
回答No.2

実際に試してないので全く見当はずれかも知れませんが……。 auctions.yahoo.co.jpということでふと思ったのですが、それらのクッキーは、ひょっとしてHTTPSアクセスで利用されるのではありませんか。HTTPSアクセスでのクッキーにはSecure属性が設定され、HTTPからは見ることができなくなりますので。

bosh1291
質問者

補足

ご回答ありがとうございます。 HTTPS アクセス時は、 require 'net/https' を使用した別のコードが必要になるんですね。 色々調べることができました。ありがとうございます。

回答No.1

取得できるわけないでしょ。 仮に銀行のCookieを読み取れるってことは、そのURIを踏めば、 誰のでも自由に銀行口座を操作することが可能になるってことですよ。 Cookieの概念を理解するように。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1021413205 そんなん読み取れたら脆弱性でブラウザに問題あり。

bosh1291
質問者

補足

説明足らずで申し訳ありません。 Cookie の情報というのは、他人のものではありません。 最終的にしたいことは、Cookie に指定した値を入力して送信したいということです。 そのためのとっかかり(Cookie の受信)ができないので困っています。