我正在尝试使用多个相同名称的值来发布请求,html类似于:
<input name="opt[]" value="1"/>
<input name="opt[]" value="2"/>
<input name="opt[]" value="3"/>
机械化我正在做类似的事情:
params = {'opt[]' => [1,2,3]}
agent.post 'url', params
没有运气。
我尝试过其他选项,例如opt: [1,2,3]
也没有运气。
答案 0 :(得分:2)
根据Mechanize的Documentation和此GitHub Issue中的讨论,提交这些参数的正确方法是使用2D数组,如下所示
params = [["opt[]",1],["opt[]",2],["opt[]",3]]
agent.post 'url', params
在阅读GitHub关注时,似乎这是一个已知的功能约束,他们正在或正在计划努力解决这个问题,但目前这是正确的提交方法。如果您更愿意使用Hash
结构,那么操作就不会那么困难了。
def process_to_mechanize_params(h)
h.map do |k,v|
if v.is_a?(Array)
v.map {|e| ["#{k}[]",e]}
else
[[k.to_s,v]]
end
end.flatten(1)
end
然后你可以使用
params = {'opt' => [1,2,3],'value' => 22, another_value: 'here'}
process_to_mechanize_params(params)
#=>=> [["opt[]", 1], ["opt[]", 2], ["opt[]", 3], ["value", 22], ["another_value", "here"]]
希望这会有所帮助。正如@pguardiario所指出的,String也是可以接受的,但我觉得它可能会降低可读性。
答案 1 :(得分:0)
您应该能够将它们发布为字符串:
agent.post url, 'opt[]=1&opt[]=2&opt[]=3'