2012-03-27 9 views
0

私はTHISと似た形をしており、ルビーを使ってCSVファイルからデータを送信したいと考えています。ここで私がやろうとしてきたものです:ruby​​を使ってformstackフォームを送信するには?

require 'uri' 
require 'net/http' 

params = { 
     'field15157482-first' => 'bip', 
     'field15157482-last' => 'bop', 
     'field15157485'   => '[email protected]', 
     'field15157487'   => 'option1' 
     'fsSubmitButton1196962' => 'Submit' 
} 

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

私は私が間違ったURLを使用していますが、私はそれを交換するかわからない勘を持ってA valid form ID was not supplied.を得続けます。 私はAPIを使用しますが、私はトークンにアクセスできませんので、私の石器時代のアプローチです。どんな提案も大歓迎です。

答えて

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 protected]" 
       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

私はMechanizeのことを聞いたことがない、これは素晴らしいです! – Josh

-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 

を有効なサブミットのために他の隠しフィールドを含める。

関連する問題