我正在尝试使用Mechanize捕获POST请求,这是通过表单无法实现的,因为表单位于iframe中,阻止通过javascript直接加载。
来自Google Chrome的示例请求中的HTTP标头如下(请注意parada
和linea
参数)
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
答案 0 :(得分:2)
实际上,您的原始代码运行正常。您只需将其打印为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")
答案 1 :(得分:-2)
post方法将参数作为哈希值。尝试:
agent.post(“http://www.etr.gov.ar/getSmsResponse.php”,{“parada”=>“4152”,“linea”=>“112”})