如何使用ruby提交formstack表单?

时间:2012-03-27 18:04:09

标签: ruby uri net-http formstack

我有一个与THIS类似的表单,并希望使用ruby从CSV文件向其提交数据。这是我一直在努力做的事情:

require 'uri'
require 'net/http'

params = {
      'field15157482-first'   => 'bip',
      'field15157482-last'    => 'bop',
      'field15157485'         => 'bip@bob.com',
      'field15157487'         => 'option1'
      'fsSubmitButton1196962' => 'Submit'
}

x = Net::HTTP.post_form(URI.parse('http://www.formstack.com/forms/?1196833-GxMTxR20GK'), params)

我一直在A valid form ID was not supplied.我有预感我使用了错误的网址,但我不知道该替换它的内容。 我会使用API​​,但我无法访问令牌,因此我的石器时代方法。任何建议都会非常感激。

2 个答案:

答案 0 :(得分:1)

表单使用隐藏变量和cookie来尝试维护“唯一会话”。幸运的是,Mechanize使处理'偷偷摸摸'的形式非常容易。

require "mechanize"
form_uri = "http://www.formstack.com/forms/?1196962-617Z6Foyif"

@agent = Mechanize.new
page = @agent.get form_uri

form = page.forms[0]

form.fields_with(:class => /fsField/).each do |field|
  field.value = case field.name
                  when /first/ then "First Name"
                  when /last/ then "Last Name"
                  else "email@address.com" 
                end
end

page = form.submit form.buttons.first

puts
puts "=== Response Header"
puts
puts page.header
puts
puts "=== Response Body"
puts
puts page.body

答案 1 :(得分:-1)

查看http://www.formstack.com/forms/?1196833-GxMTxR20GK上的来源以及链接中的示例,看来formstack表单发布到index.php,并且需要传入表单ID以标识正在提交的表单。在两个示例中的表单中,您将看到与此类似的字段:

<input type="hidden" name="form" value="1196833" />

尝试将以下内容添加到params哈希:

'form' => '1196883' # or other appropriate form value

您可能还需要包含其他隐藏字段以进行有效提交。