Как отправить форму стека с помощью ruby? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть форма, похожая на ЭТО , и я хочу отправить ей данные из файла CSV с помощью ruby. Вот что я пытался сделать:

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. У меня есть подозрение, что я использую неправильный URL, но я не знаю, чем заменить его. Я бы использовал API, но у меня нет доступа к токену, поэтому мой подход каменного века. Любые предложения будут высоко оценены.

Ответы [ 2 ]

1 голос
/ 12 апреля 2012

Форма использует скрытые переменные и файлы cookie, чтобы попытаться сохранить «уникальный сеанс».К счастью, Механизация делает обработку «подлых» форм довольно легкой.

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
0 голосов
/ 12 апреля 2012

Глядя на источник на http://www.formstack.com/forms/?1196833-GxMTxR20GK и пример в вашей ссылке, кажется, что форма стека формирует запись в index.php и требует передачи идентификатора формы, чтобы определить, какая форма отправляется ..Глядя на формы в обоих примерах, вы увидите поле, похожее на это:

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

Попробуйте добавить следующее к вашему хэшу params:

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

Вам также может понадобитьсявключите другие скрытые поля для правильной отправки.

...