2011-08-12 13 views
14

İşveren biletlerimi bir API sağlamayan bir bilet yönetim sisteminden ayıklamak için, Ruby'nin Mechanize sürümünü kullanmaya çalışıyorum.Mekanizma istekleri arasındaki çerezlerin bakımı

Sorun o makineleştirmek aşağıda gösterilen post çağrı ve get çağrısı arasında çerezleri tutmak değil gibi görünüyor, geçerli:

require 'rubygems' 
require 'nokogiri' 
require 'mechanize' 

@agent = Mechanize.new 

page = @agent.post('http://<url>.com/user_session', { 
              'authenticity_token' => '<token>', 
              'user_session[login]' => '<login>', 
              'user_session[password]' => '<password>', 
              'user_session[remember_me]' => '0', 
              'commit' => 'Login' 
}) 

page = @agent.get 'http://<url>.com/<organization>/<repo-name>/tickets/1' 
puts page.title 

user_session hangi sitenin giriş sayfası POST URL ve ben ettik Bu gerçekten beni oturum açtığını doğruladı. Ama get çağrısı döndüren sayfa 'Oops, giriş yapmadınız!' sayfa.

post numaralı çağrıdan dönen sayfadaki click numaralı bağlantıların çalıştığını doğruladım, ancak JavaScript'i kullanmadan gitmem gereken yere ulaşamıyorum. Ve elbette bunu, aynı girişle tarayıcıda başarıyla yaptım.

Neyi yanlış yapıyorum?

cevap

12

Tamam, bu size yardımcı olabilir - öncelikle hangi mekanizma sürümünü kullanıyorsunuz? Bu sorunun çerezlerin üzerine yazılması/talepler arasında mekanize edilmesiyle veya çerezlerin yanlış olması/ilk olarak ayarlanmaması durumunda oluşması gerekiyorsa, tanımlamanız gerekir. Ne kaydedildiğini görmek için, iki istek arasında bir puts @agent.cookie_jar.jar ekleyerek bunu yapabilirsiniz.

Üzerine yazma sorunu varsa, ilk istekte bulunan çerezleri toplayıp bunları ikincisine uygulayarak çözebilirsiniz. Bunu yapmanın pek çok yolu vardır:

bir yolu sadece tekrar ANCAK .Add yöntem

kullanarak sadece her çerez geçiyor sonra bir temp_jar = agent.cookie_jar.jar bir yapmak ve eklemektir - en kolay yolu sadece yükleyerek olduğunu makinenin en son 2.1 sürümü (birçok düzeltmeler), çünkü bunu çok basit bir şekilde yapabilirsiniz.

require 'rubygems' 
require 'nokogiri' 
require 'mechanize' 

@agent = Mechanize.new 

page = @agent.post('http://<url>.com/user_session', { 
             'authenticity_token' => '<token>', 
             'user_session[login]' => '<login>', 
             'user_session[password]' => '<password>', 
             'user_session[remember_me]' => '0', 
             'commit' => 'Login' 
}) 
temp_jar = @agent.cookie_jar 
#Do whatever you need an use the cookies again in a new session after that 
@agent = Mechanize.new 
@agent.cookie_jar = temp_jar 

page = @agent.get 'http://<url>.com/<organization>/<repo-name>/tickets/1' 
puts page.title 

BTW dokümantasyon bu güzel burada http://mechanize.rubyforge.org/index.html

+0

aşağıdaki gibidir: sadece yapabileceği bir gem install mechanize --pre yapmak son yükleyin ve bundan sonra gem uninstall mechanize 'some_version' motorize eski sürümü kurtulmak için emin olmak için Kötü, neden yeni bir mekanize örneği gerekiyor? –

+0

@DitmarWendt Bu, giriş sonrası çalıştırıldıktan sonra daha önce elde edilen çerezlerin nasıl yeniden kullanılacağına ilişkin bir örnektir. –