Forum: Ruby Net::HTTP working on Windows, but not Unix

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-03-02 21:04
(Received via mailing list)
We have an odd problem at work today.

Running the following code on Windows XP gives us a CVV2 error, which
is what we expect (we didn't give one).  However, running the same
code on Linux or OS X gets a complaint that we didn't provide the
key, which is obviously not true (see last line).

Does anyone see anything inherently non-portable in the following code?

   require 'net/http'
   require 'net/https'

   uri  = URI.parse 'https://www.usaepay.com/gate.php'
   p (http = Net::HTTP.new(uri.host, uri.port))
   p http.use_ssl     = true
   p http.verify_mode = OpenSSL::SSL::VERIFY_NONE
   p http.post(uri.path, "UMkey=OUR_KEY_CODE_HERE").body

Thanks in advance for any hints.

James Edward Gray II
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-03-02 23:02
(Received via mailing list)
On Mar 2, 2006, at 2:03 PM, James Edward Gray II wrote:

>   require 'net/http'
>   require 'net/https'
>
>   uri  = URI.parse 'https://www.usaepay.com/gate.php'
>   p (http = Net::HTTP.new(uri.host, uri.port))
>   p http.use_ssl     = true
>   p http.verify_mode = OpenSSL::SSL::VERIFY_NONE
>   p http.post(uri.path, "UMkey=OUR_KEY_CODE_HERE").body
>

Switching the code to the following seems to work everywhere, as long
as 1.8.4 is used:

   require 'net/https'

   uri  = URI.parse 'https://www.usaepay.com/gate.php'
   req = Net::HTTP::Post.new(uri.path)
   req.set_form_data "UMkey" => "OUR_KEY_CODE_HERE"
   p (http = Net::HTTP.new(uri.host, uri.port))
   p http.use_ssl	   = true
   p http.verify_mode = OpenSSL::SSL::VERIFY_NONE
   p http.start { http.request(req) }.body

I still don't understand why the first version didn't work though...

James Edward Gray II
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-03-03 01:36
(Received via mailing list)
On Mar 2, 2006, at 4:00 PM, James Edward Gray II wrote:

>> code?
>
>   p http.verify_mode = OpenSSL::SSL::VERIFY_NONE
>   p http.start { http.request(req) }.body
>
> I still don't understand why the first version didn't work though...

Sorry to keep responding to myself but we have now realized that that
the Windows machine, where the top example originally worked, was
running 1.8.2 while both failing machines were running 1.8.4.

The bottom "fix" did not work on the Windows box right off the bat,
because set_form_data() seems to have been added after 1.8.2.
Upgrading fixes the issue.

That raises the question of what caused the original failure though.
Was the handling of the second parameter to post() changed between
1.8.2 and 1.8.4?  If so, I suspect there could be some more broken
code out there...

James Edward Gray II
E51d56251ec4affafe85ee9367228965?d=identicon&s=25 Park Heesob (Guest)
on 2006-03-03 03:22
(Received via mailing list)
Hi,

>>>We have an odd problem at work today.
>>>
>>>   uri  = URI.parse 'https://www.usaepay.com/gate.php'
>>>   p (http = Net::HTTP.new(uri.host, uri.port))
>>>   p http.use_ssl     = true
>>>   p http.verify_mode = OpenSSL::SSL::VERIFY_NONE
>>>   p http.post(uri.path, "UMkey=OUR_KEY_CODE_HERE").body
This will work :

p http.post(uri.path, "UMkey=OUR_KEY_CODE_HERE",{'Content-Type' =>
'application/x-www-form-urlencoded'}).body

>>>
>>
>>Switching the code to the following seems to work everywhere, as  long as
>>1.8.4 is used:
...
>
>That raises the question of what caused the original failure though.   Was
>the handling of the second parameter to post() changed between  1.8.2 and
>1.8.4?  If so, I suspect there could be some more broken  code out there...
>
There must be a bug in 1.8.4 Net::HTTP post.
I suspect  lib/net/http.rb line #1507

      unless content_type()
        warn 'net/http: warning: Content-Type did not set; using
application/x-www-form-urlencoded' if $VERBOSE
        set_content_type 'application/x-www-form-urlencoded'
      end

Regards,

Park Heesob
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2006-03-03 03:34
(Received via mailing list)
On Mar 2, 2006, at 8:21 PM, Park Heesob wrote:

> p http.post(uri.path, "UMkey=OUR_KEY_CODE_HERE",{'Content-Type' =>
> 'application/x-www-form-urlencoded'}).body

Awesome.  Thank you so much.

> There must be a bug in 1.8.4 Net::HTTP post.
> I suspect  lib/net/http.rb line #1507
>
>      unless content_type()
>        warn 'net/http: warning: Content-Type did not set; using
> application/x-www-form-urlencoded' if $VERBOSE
>        set_content_type 'application/x-www-form-urlencoded'
>      end

Hmm, I'll move this over to Ruby Core now and see if we can get the
people in-the-know looking into this...

James Edward Gray II
This topic is locked and can not be replied to.