2011-02-02 8 views
1

私はRubyでビデオクローラをやっています。そこに私はクッキーとダウンロードページを有効にすることによってページにログインする必要があります。そのために私はCURLライブラリをRubyで使用しています。私は正常にログインすることができますが、私はカールでその中のページをダウンロードすることはできません。それ以外の方法でページを修正したりダウンロードしたりするにはどうすればよいですか?Rubyでcurlを使ってあるページから別のページにクッキーを渡すには?

私のコードは、(これは、とりわけ、クッキーを格納処理する)この種のものは、本当に簡単になり

curl = Curl::Easy.new(1st url) 
curl.follow_location = true 
curl.enable_cookies = true 
curl.cookiefile = "cookie.txt" 
curl.cookiejar = "cookie.txt" 
curl.http_post(1st url,field) 

curl.perform 
curl = Curl::Easy.perform(2nd url) 
curl.follow_location = true 
curl.enable_cookies = true 
curl.cookiefile = "cookie.txt" 
curl.cookiejar = "cookie.txt" 
curl.http_get 

code = curl.body_str 
+0

コードは常に投稿する必要があります。あなたがどこにいるかから始めることができれば、それはあなたをより簡単に支援します。 –

答えて

0

HTTPClientは、Mechanizeのように自動的にCookieを有効にします。 HTTPClientのドキュメントから

:私は私自身の同様の「ポスト当時の取得」スクリプトを書くことで見てきた何

body = { 'keyword' => 'ruby', 'lang' => 'en' } 
res = clnt.post(uri, body) 
3

があることである:

clnt = HTTPClient.new 
clnt.get_content(url1) # receives Cookies. 
clnt.get_content(url2) # sends Cookies if needed. 

フォームを投稿が簡単すぎますruby/Curb(私はRuby 1.8でバージョン0.7.15を使用しています)は、Curl :: Easyオブジェクトのcookiejar/cookiefileフィールドを無視しているようです。これらのフィールドのいずれかを設定すると、http_postが正常に完了すると、cookiejarまたはcookiefileファイルは作成されません。また、curl.cookiesはcurl.http_postの後もnilになりますが、curlオブジェクト内でクッキーが設定されます。

curl = Curl::Easy.perform(2nd url) 

縁石のドキュメントは、これは新しいオブジェクトを作成すると述べている:私は、私はあなたが間違っているのはここだと思います:)

をお約束します。その新しいオブジェクトには、既存のCookieが設定されていません。コードを以下のように変更した場合、動作するはずです。 curl.http_postはすでに暗黙のうちに "実行する"ので、最初のurlのcurl.performも削除しました。 http_getを試す前に、基本的にhttp_post'ingしていました。これはまだあなたのために動作しない場合はクッキーが

curl.http_post 

あなたのカールの前に

curl.verbose = true 

を追加することにより、設定取得されている場合

curl = Curl::Easy.new(1st url) 
curl.follow_location = true 
curl.enable_cookies = true 
curl.http_post(1st url,field) 

curl.url = 2nd url 
curl.http_get 

code = curl.body_str 

、あなたは確認することができます::簡単なオブジェクトは、サーバーから$ stdoutへの応答に含まれるすべてのヘッダーをダンプし、そこにはクッキーの追加/設定を示す行が表示されます。今はサンプル出力がありませんが、すぐにフォローアップを投稿しようとします。

関連する問題