我有一个与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,但我无法访问令牌,因此我的石器时代方法。任何建议都会非常感激。
答案 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
您可能还需要包含其他隐藏字段以进行有效提交。