Ruby mécaniser poste avec en-tête
J'ai la page avec js que publier des données via XMLHttpRequest et côté serveur cocher de script pour cette en-tête, comment envoyer cet en-tête?
agent = WWW::Mechanize.new { |a|
a.user_agent_alias = 'Mac Safari'
a.log = Logger.new('./site.log')
}
agent.post('http://site.com/board.php',
{
'act' => '_get_page',
"gid" => 1,
'order' => 0,
'page' => 2
}
) do |page|
p page
end
source d'informationauteur AnimalCode
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ce post avec une recherche sur le web (deux mois plus tard, je sais) et je voulais juste partager une autre solution.
Vous pouvez ajouter des en-têtes personnalisés sans monkey patching Mécaniser l'aide d'un pré-connect crochet:
Le code ci-dessus fonctionne pour moi (Mécaniser 1.0) comme un moyen de rendre le serveur pense que la demande est venue par l'intermédiaire d'AJAX, mais comme indiqué dans d'autres réponses, cela dépend de ce que le serveur est à la recherche d', il sera différente pour différents frameworks/bibliothèque js combos.
La meilleure chose à faire est d'utiliser Firefox HTTPLiveHeaders plugin ou HTTPScoop et regardez les en-têtes de requête envoyée par le navigateur et juste essayer et répliquer.
Semble que les versions antérieures de Mécaniser que lambda a un argument, mais maintenant il a deux:
Prendre un coup d'oeil à la la documentation.
Vous avez besoin soit d'un singe, de patch ou de tirer votre propre classe de
WWW::Mechanize
pour remplacer lepost
méthode de manière à ce que les en-têtes personnalisés sont transmis par le biais de la méthode privéepost_form
.Par exemple,