Adding Post Data to IE.navigate method with Ruby

Hi all,

I’m automating IE with Watir and Ruby and I have a slight problem that
I can’t seem to solve. I’d like to pass post data to IE’s navigate
method (Navigate method (Internet Explorer) | Microsoft Learn)

Seems like the postdata parameter is a byte array so here’s what I’ve
done in ruby to try to pass this data

  bytearray = []
  postdata.each_byte{ |c| bytearray.push(c) }
  @ie.navigate(url, nil, nil, bytearray, "Content-Type:

application/x-www-form-urlencoded\r\n")

Fiddler seems to always say that the content length is 16 times longer
than the actual length and I’m not sure why. Does anyone know how make
this call work? TIA.

-Bach

On Nov 15, 11:40 am, Bach Le [email protected] wrote:

  postdata.each_byte{ |c| bytearray.push(c) }
  @ie.navigate(url, nil, nil, bytearray, "Content-Type:

application/x-www-form-urlencoded\r\n")

Fiddler seems to always say that the content length is 16 times longer
than the actual length and I’m not sure why. Does anyone know how make
this call work? TIA.

-Bach

post data is usually hash like, so maybe this is what you need
( untested )
data = {}
data[“name”]=>‘paul’
data[“url”]=> ‘www.google.com

post_data = []
data.each_pair do |k,v|
post_data << “#{k}=#{v}”
end
@ie.navigate(url, nil, nil, post_data.join(“&”), “Content-Type:
application/x-www-form-urlencoded\r\n”)

You’ll probably have to url encode the data too though

Paul

On Nov 15, 2:12 pm, Paul R. [email protected] wrote:

Seems like the postdata parameter is a byte array so here’s what I’ve

post_data << “#{k}=#{v}”
end
@ie.navigate(url, nil, nil, post_data.join(“&”), “Content-Type:
application/x-www-form-urlencoded\r\n”)

You’ll probably have to url encode the data too though

Paul

Hi Paul,

Thanks for getting back to me. Seems like IE won’t do a POST unless
that parameter is an array of some sort. If i simply place a string
such as “param1=value1&param2=value2” (which I think is what your code
is doing) it simply does a GET request and the data is discarded.

I think the issue is that the “navigate” method is expecting a byte
array but from what I can see, all the values in ruby are 32 bits
which is 4 bytes therefore I’m sending extra data.

I still don’t know how to change the output from “each_byte” into 8
bits instead of a 32 bit integer to make this call work.

-Bach