gpt4 book ai didi

ruby-on-rails - 使用 Mechanize 捕获 POST 请求

转载 作者:行者123 更新时间:2023-12-04 16:19:34 25 4
gpt4 key购买 nike

我正在尝试使用 Mechanize 捕获无法通过表单实现的 POST 请求,因为该表单位于阻止直接通过 javascript 加载的 iframe 内。

HTTP header 在来自 Google Chrome 的示例请求中如下所示(注意 paradalinea 参数)

Request URL:http://www.etr.gov.ar/getSmsResponse.php
Request Method:POST
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es-419,es;q=0.8
Connection:keep-alive
Content-Length:21
Content-Type:application/x-www-form-urlencoded
Host:www.etr.gov.ar
Origin:http://www.etr.gov.ar
Referer:http://www.etr.gov.ar/cont-cuandollega.php
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.30 Safari/534.30
X-Requested-With:XMLHttpRequest

Form Dataview URL
parada:4152
linea:112

Response Headers
Connection:close
Content-Length:111
Content-Type:text/html
Date:Fri, 03 Jun 2011 02:35:45 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.1.2
ASP.NETl

这个例子的内容是:
Linea 112N: 0min. 379mts., siguiente 25min. 9937mts. - Linea 112R: 81min. 24349mts., siguiente 101min. 30548mts

我用 Mechanize 尝试过的是以下 ruby​​ 脚本,但我得到了一个空白页作为回应:
require 'mechanize'
agent = WWW::Mechanize.new
agent.post("http://www.etr.gov.ar/getSmsResponse.php", "parada" => "4152", "linea"=>"112")

我会做错什么?非常感谢。

更新:将 POST 作为散列传递非常有效。为了呈现内容,我只需要做 agent.post.content

最佳答案

实际上,您的原始代码运行良好。您只需将其打印为 agent.post.content查看结果。

回应mightilybix的回答:

您的代码在不使用 { 和 } 传递散列的情况下工作的原因是因为 Ruby 有一个特性,如果您将散列作为函数的最后一个参数传递,那么您不需要包含大括号。例如:

def test(str, params)
puts str
params.each { |param| puts param }
end

调用:
test("hello", {"animal" => "cat", "gender" => "m"})

与调用完全相同:
test("hello", "animal" => "cat", "gender" => "m")

关于ruby-on-rails - 使用 Mechanize 捕获 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com