使用Ruby从同一URL提交两个POST请求

时间:2018-12-19 21:12:19

标签: ruby post

我正在尝试从一页提交两个POST请求。下面的代码提交第一个表单,并使用相同的URL转到下一页。

在下一页上,我需要激活一个下载按钮以取回xlsx文件。

require 'net/https'
require 'uri'

uri = URI.parse('example.com/page1.asp')
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
req.set_form_data({"Firstname" => "name", "Lastname" => "lname", "submit1" => "Submit"})


puts res.body

这是我正在寻找的puts res.body返回的部分:

<form  action="download.asp" method="post"  >
<input type="submit" value="Download"  name="Submit" />
<input type ="hidden" value="example.xlsx"  name="filename" />
</form>

是否有一种方法可以触发“提交”按钮,然后再触发带有红宝石的“下载”按钮?

1 个答案:

答案 0 :(得分:0)

您需要从表单中读取值,然后将其提交回去:

uri = URI.parse('example.com/download.asp')
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true 
req = Net::HTTP::Post.new(uri.request_uri)
req.set_form_data({"Submit" => "Download", "filename" => "example.xlsx"})

现在,响应将是文件数据,在这种情况下,我们这样做:

File.open(“download/filepath.xslx”, ‘w’) do |f|
  f.write res.body
end

或者,它将重定向您到新的URL,一旦您到达最终文件,就必须调用GET请求。