J'ai une page avec JS qui post des données via XMLHTTTPRequest and Server Script Cochez votre 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
4 Réponses :
Jetez un coup d'œil au Documentation .
Vous devez Soit monkey-patch ou dérive votre propre cours de par exemple, p> www :: mécanise code> pour remplacer la méthode code> de manière code> de sorte que les en-têtes personnalisés soient passés à la méthode privée
post_form code>. p>
J'ai trouvé cet article 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 patching de singe mécanisée à l'aide d'un crochet de pré-raccordement: P> p> p>
Je suis venu ici à la recherche d'un moyen de définir l'en-tête de référateur. Toutefois, avec Mécaniser (2.3) i> i Obtenir l'erreur Méthode non définie 'Pre_Connect_hooks' pour NILLCLASS (NOMETHODERROR) CODE>
@marcos: Cela suggérerait que votre objet code> Agent code> est nul pour certaines raisons. Pouvez-vous vérifier cela? Une fois que vous avez résolu cela, vous constaterez que Mécaniser 2.0 prend des arguments différents pour la Lambda - Vérifiez les derniers docs.
Mon commentaire n'est plus valable après avoir édité cette réponse. Auparavant, je l'ai codé à tort comme une ligne longue comme présentée dans Ver.1, provoquant agent.pre_connect_hooks code> pour être utilisé avant
agent code>.
Me donne moi Nombre incorrect d'arguments (2 pour 1) code>, mécanisée-2.7.3 / lib / mécanise / http / agent.rb: 398: In "appel". Utilisé Stackoverflow.com/a/30266454/111995
ajax_headers = { 'X-Requested-With' => 'XMLHttpRequest', 'Content-Type' => 'application/json; charset=utf-8', 'Accept' => 'application/json, text/javascript, */*'} params = {'emailAddress' => 'me@my.com'}.to_json response = agent.post( 'http://example.com/login', params, ajax_headers) The above code works for me (Mechanize 1.0) as a way to make the server think the request is coming via AJAX, but as stated in other answers it depends what the server is looking for, it will be different for different frameworks/js library combos. The best thing to do is use Firefox HTTPLiveHeaders plugin or HTTPScoop and look at the request headers sent by the browser and just try and replicate that.
semble que plus tôt que Lambda avait un argument, mais maintenant, il a deux:
agent = Mechanize.new do |agent| agent.pre_connect_hooks << lambda do |agent, request| request["Accept-Language"] = "ru" end end
Quel en-tête est le script côté serveur à la recherche? Cela peut varier. Par exemple, dans les rails, je crois que _method est recherché, mais cela ne sera pas nécessairement le cas avec tout script PHP que vous frappez.
Je pense que vous devez accepter un animal de réponse ...