Is there a way to pass in 2 parameters with the same name to the
Net::Http client in ruby?
It's using a map right now, and it only stores one of the values.
Is this a bug in the Http client implementation?
The http spec allows you to pass in multiple parameters with the same
name.
def get_data(data, in_only='Y')
one = Time.new
url = URI.parse('http://127.0.0.1/ec/data.xml')
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'user', 'pass'
req.set_form_data({'test'=>1, 'test'=>2})
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
xml = res.body
else
res.error!
end
end
Without trying I'd assume that it should work like this:
req.set_form_data({'test'=>[1, 2]})
btw, you can leave out the curlys
req.set_form_data('test'=>[1, 2])
Kind regards
robert
···
On 19.04.2007 23:53, scott.archer@gmail.com wrote:
Is there a way to pass in 2 parameters with the same name to the
Net::Http client in ruby?
It's using a map right now, and it only stores one of the values.
Is this a bug in the Http client implementation?
The http spec allows you to pass in multiple parameters with the same
name.
def get_data(data, in_only='Y')
one = Time.new
url = URI.parse('http://127.0.0.1/ec/data.xml'\)
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'user', 'pass'
req.set_form_data({'test'=>1, 'test'=>2})
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
xml = res.body
else
res.error!
end
end
Here is the ruby program I'm trying to run, and the Java Program that
explains what I am trying to do a little better.
require 'net/http'
url = URI.parse("http://localhost/test/scott.jsp"\)
req = Net::HTTP::Post.new(url.path)
req.set_form_data({'test'=>['1','2']})
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
xml = res.body
else
res.error!
end
puts xml
Here is the java jsp i'm testing it with.
<%
StringBuffer sb = new StringBuffer();
String values = request.getParameterValues("test");
sb.append(values.length + " ");
for(int i=0;i<values.length;i++)
sb.append(values[i] + " ");
%>
<%=sb.toString()%>
I would expect values to be an array with 2 items in it.
When I run the program I get back a single value with "12" in it.
instead of 2 separate values with "1" and "2" in them.
The query string in the browser would look like "http://localhost/test/
scott.jsp?test=1&test=2"
But i'd like to do that in ruby with a post request.
Thanks for the help.
···
On Apr 20, 4:00 am, Robert Klemme <shortcut...@googlemail.com> wrote:
On 19.04.2007 23:53, scott.arc...@gmail.com wrote:
> Is there a way to pass in 2 parameters with the same name to the
> Net::Http client in ruby?
> It's using a map right now, and it only stores one of the values.
> Is this a bug in the Http client implementation?
> The http spec allows you to pass in multiple parameters with the same
> name.
> def get_data(data, in_only='Y')
> one = Time.new
> url = URI.parse('http://127.0.0.1/ec/data.xml'\)
> req = Net::HTTP::Post.new(url.path)
> req.basic_auth 'user', 'pass'
> req.set_form_data({'test'=>1, 'test'=>2})
> res = Net::HTTP.new(url.host, url.port).start {|http|
> http.request(req) }
> case res
> when Net::HTTPSuccess, Net::HTTPRedirection
> xml = res.body
> else
> res.error!
> end
> end
Without trying I'd assume that it should work like this:
req.set_form_data({'test'=>[1, 2]})
btw, you can leave out the curlys
req.set_form_data('test'=>[1, 2])
Kind regards
robert
First I'd make sure your JSP actually behaves as expected, i.e. detects multiple values properly. For example, you could do something like this
<%= Arrays.asList( request.getParameterValues("test") ) %>
This should print a comma separated and bracket enclosed list.
Only then I'd continue to work on the Ruby side.
robert
···
On 25.04.2007 00:05, scott.archer@gmail.com wrote:
On Apr 20, 4:00 am, Robert Klemme <shortcut...@googlemail.com> wrote:
On 19.04.2007 23:53, scott.arc...@gmail.com wrote:
Is there a way to pass in 2 parameters with the same name to the
Net::Http client in ruby?
It's using a map right now, and it only stores one of the values.
Is this a bug in the Http client implementation?
The http spec allows you to pass in multiple parameters with the same
name.
def get_data(data, in_only='Y')
one = Time.new
url = URI.parse('http://127.0.0.1/ec/data.xml'\)
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'user', 'pass'
req.set_form_data({'test'=>1, 'test'=>2})
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
xml = res.body
else
res.error!
end
end
Without trying I'd assume that it should work like this:
req.set_form_data({'test'=>[1, 2]})
btw, you can leave out the curlys
req.set_form_data('test'=>[1, 2])
Kind regards
robert
Here is the ruby program I'm trying to run, and the Java Program that
explains what I am trying to do a little better.
require 'net/http'
url = URI.parse("http://localhost/test/scott.jsp"\)
req = Net::HTTP::Post.new(url.path)
req.set_form_data({'test'=>['1','2']})
res = Net::HTTP.new(url.host, url.port).start {|http|
http.request(req) }
case res
when Net::HTTPSuccess, Net::HTTPRedirection
xml = res.body
else
res.error!
end
puts xml
Here is the java jsp i'm testing it with.
<%
StringBuffer sb = new StringBuffer();
String values = request.getParameterValues("test");
sb.append(values.length + " ");
for(int i=0;i<values.length;i++)
sb.append(values[i] + " ");
%>
<%=sb.toString()%>
I would expect values to be an array with 2 items in it.
When I run the program I get back a single value with "12" in it.
instead of 2 separate values with "1" and "2" in them.
The query string in the browser would look like "http://localhost/test/
scott.jsp?test=1&test=2"
But i'd like to do that in ruby with a post request.
Thanks for the help.