ruby http重名参数请求问题

发表于:2012-10-18来源:futurehandw作者:吴颖敏点击数: 标签:ruby
Jason在做web service自动化测试平台的时候遇到ajax传回的数据,rails中无法利用 Ruby Net::HTTP post正确传值,这里将解决方案做下memory。

  Jason在做web service自动化测试平台的时候遇到ajax传回的数据,rails中无法利用 Ruby Net::HTTP post正确传值,这里将解决方案做下memory。

  Problem:

  params1["a"] = ['int','int']

  params1["b"] = ['string','string']

  uri = URI.parse(“http://XX.XX.XX.XX/invoke.json”)

  res = Net::HTTP.post_form(uri, params1)

  传值出现 b=stringstring&a=intint的情况。

  Reason:

  察看NET::HTTP发现 post_form最终调用的 set_form_data 的问题。

  Solution:

  修改代码增加对子value的判断

  def set_form_data(request, params, sep = ‘&’)

  request.body = params.map {|k,v|

  if v.instance_of?(Array)

  v.map {|e| “#{urlencode(k.to_s)}=#{urlencode(e.to_s)}”}.join(sep)

  else

  “#{urlencode(k.to_s)}=#{urlencode(v.to_s)}”

  end

  }.join(sep)

  request.content_type = ‘application/x-www-form-urlencoded’

  end

  def urlencode(str)

  str.gsub(/[^a-zA-Z0-9_\.\-]/n) {|s| sprintf(‘%%%02x’, s[0]) }

  end

自动化测试优化的路还很长,walking on
:)

原文转自:http://www.ltesting.net