Le maintien de cookies entre Mécaniser les demandes
Je suis en train d'utiliser la version de Ruby de Mécaniser l'extraire de mon employeur billets à partir d'un billet de système de gestion que nous allons loin de ce que ne peut pas fournir une API.
Problème est, il semble Mécaniser n'est pas de garder les cookies entre les post
appel et la get
appel indiqué ci-dessous:
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
est l'URL vers laquelle le site la page de connexion de Postes, et j'ai vérifié que ce fait se connecte moi. Mais la page qui renvoie de la get
appel est le " Oups, vous n'êtes pas connecté!' page.
J'ai vérifié que click
ing liens sur la page qui renvoie de la post
appel fonctionne, mais je ne peux pas vraiment en arriver là où j'ai besoin d'aller sans JavaScript. Et bien sûr je l'ai fait avec succès sur le navigateur avec le même login.
Ce que je fais mal?
OriginalL'auteur adamjford | 2011-08-12
Vous devez vous connecter pour publier un commentaire.
Bon ce qui pourrait vous aider - tout d'abord quelle est la version de mécaniser l'utilisez-vous? Vous devez vous identifier, si ce problème est dû à l'utilisation de cookies écrasés et nettoyés par mécaniser entre les demandes, ou si les cookies sont mauvais/pas définies dans la première place. Vous pouvez le faire en ajoutant un
puts @agent.cookie_jar.jar
entre les deux demandes, afin de voir ce qui est stocké.Si c'est un problème de remplacement, vous pourriez être en mesure de le résoudre par la collecte de l'cookies à partir de la première demande, et de les appliquer à la seconde. Il y a beaucoup de façons de le faire:
Une façon est de faire juste un
temp_jar = agent.cookie_jar.jar
et ensuite de passer à travers chaque cookie et l'ajouter à nouveau à l'aide de l' .ajouter une méthodeCEPENDANT - la façon la plus simple est juste de l'installation de la dernière 2.1 avant la libération de mécaniser (beaucoup de bugs), parce que vous serez alors en mesure de le faire très simplement.
Pour installer la dernière faire un
gem install mechanize --pre
et assurez-vous de se débarrasser de l'ancienne version de mécanisergem uninstall mechanize 'some_version'
après cela, il vous suffit de procéder comme suit:BTW, la documentation est ici http://mechanize.rubyforge.org/index.html
c'est juste un exemple comment ré-utiliser les cookies obtenue plus tôt après la connexion de poste exécuté.
OriginalL'auteur Niels Kristian