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
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
···
On Mar 2, 2006, at 2:03 PM, James Edward Gray II wrote:
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
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
···
On Mar 2, 2006, at 4:00 PM, James Edward Gray II wrote:
On Mar 2, 2006, at 2:03 PM, James Edward Gray II wrote:
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
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...
Hi,
From: James Edward Gray II <james@grayproductions.net>
Reply-To: ruby-talk@ruby-lang.org
To: ruby-talk@ruby-lang.org (ruby-talk ML)
Subject: Re: Net::HTTP working on Windows, but not Unix
Date: Fri, 3 Mar 2006 09:35:13 +0900
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
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:
...
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...
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
···
On Mar 2, 2006, at 4:00 PM, James Edward Gray II wrote:
On Mar 2, 2006, at 2:03 PM, James Edward Gray II 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
···
On Mar 2, 2006, at 8:21 PM, Park Heesob wrote: