From: Park Heesob Date: 2006-03-03T11:21:22+09:00 Subject: Re: Net::HTTP working on Windows, but not Unix Hi, >From: James Edward Gray II >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 > >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 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