From: Jason DiCioccio Date: 2001-09-26T06:35:30+09:00 Subject: [ruby-talk:21688] net/http problems on FreeBSD 4.4-RC --XOIedfhf+7KOe/yw Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable I'm having the following problems with Net::HTTP on ruby 1.6.4 (and 1.6.5) = on FreeBSD 4.4-RC.. I suspect it to be a bug specific ruby on the platform act= ually since it works on my OS X box fine. Basically, I get this output when running a monitor script I wrote (code wi= ll follow) bluenugget% ruby aribasitemon.rb = (~) Retrieving login page to obtain data to post . . . Data retrieved, getting username value for posting . . . Getting password value for posting . . . Getting the new session ID for posting . . . Posting data to the web server . . . Received 302 redirect from server . . . Searching for the magic string . . . /Ariba/Buyer/aw?null=3Dawsn&aws=3DmVbsIrCW2kZtLKee&awr=3D1 /usr/local/lib/ruby/1.6/net/protocol.rb:631:in `sysread': End of file reach= ed (EOFError) from /usr/local/lib/ruby/1.6/net/protocol.rb:631:in `rbuf_fill' from /usr/local/lib/ruby/1.6/net/protocol.rb:576:in `readuntil' from /usr/local/lib/ruby/1.6/net/protocol.rb:587:in `readline' from /usr/local/lib/ruby/1.6/net/http.rb:1206:in `readnew' from /usr/local/lib/ruby/1.6/net/http.rb:1182:in `new_from_socket' from /usr/local/lib/ruby/1.6/net/http.rb:1039:in `get_response' from /usr/local/lib/ruby/1.6/net/http.rb:983:in `exec' from /usr/local/lib/ruby/1.6/net/http.rb:597:in `__send__' ... 8 levels... from /usr/local/lib/ruby/1.6/net/http.rb:584:in `post2' from aribasitemon.rb:58 from aribasitemon.rb:56:in `timeout' from aribasitemon.rb:56 code is at the bottom of this message. Is there a reason why this would wo= rk on one platform and not another? One thing to note is that I did install r= uby from the ports collection on the BSD box. If there is a workaround I can d= o in the mean time, let me know :-) Thanks in advance, -JD- #!/usr/local/bin/ruby ###########################################################################= #### # = # # XXXXXXX Site Monitor Skript -jd = # # = # ###########################################################################= #### require 'net/http' require 'timeout' # Create our error class class SiteError < StandardError end begin # Set some sane defaults scheme, host, port, path =3D "http", "xxxx.xxxxxx.xxx", 8081, "/Ariba" # Gather args from command line if necessary if %r!(https?)://(.*?)(?::(\d+))?(\.*)! =3D~ ARGV[0] scheme =3D $1 host =3D $2 port =3D $3 ? $3.to_i : ((scheme =3D=3D http) ? 80 : 443) path =3D $4 end PostData =3D Struct.new( "PostData", :name, :password, :sid ) postValues =3D PostData.new( nil, nil, nil ) # Fetch the requested document h =3D Net::HTTP.new(host, port) h.use_ssl =3D true if scheme =3D=3D "https" # enable SSL/TLS # Try and extract the INPUT names timeout(15) do puts "Retrieving login page to obtain data to post . . ." h.get2( path, header =3D nil ) do |recv| inputLines =3D recv.body.to_s result =3D inputLines.scan(/.*grpFV">/) puts "Data retrieved, getting username value for posting . . ." postValues.name =3D result[0].scan("([0123456789]+)")[0] puts "Getting password value for posting . . ." postValues.password =3D result[1].scan("([0123456789]+)")[0] # Get the session ID puts "Getting the new session ID for posting . . ." result =3D inputLines.scan(/"aws".*/)[0] result =3D result.scan(/value=3D"(.*)"/)[0] postValues.sid =3D result.to_s.gsub(/\".*/, "") end end # Try and post login data timeout(15) do puts "Posting data to the web server . . ." h.post2( '/Ariba/Buyer/aw', "#{postValues.name}=3Djdoe&#{postValues.pas= swor d}=3Dfeh&timezone=3D420&timezoneFeb=3D480&timezoneAug=3D420&900=3Dawsnf&awf= id=3Dtrue&aws=3D# {postValues.sid}&awr=3D1&awscratch=3D&awcharset=3D8859_1&90131100.x=3D0&901= 31100.y=3D0" ) do |recv| # We have the new location, now go fetch the correct page raise SiteError, "Did not receive 302 from the application" if recv.h= eader ['Location'] =3D=3D nil puts "Received 302 redirect from server . . ." puts "Searching for the magic string . . ." path =3D recv.header['Location'] puts path h.get2( path, header =3D nil ) do |page| if( page.body !~ /Welcome John Doe/ ) raise SiteError, "Page returned was invalid" else puts "Found the magic string . . ." end # if ( page.body ... ) end # h.get2( ... ) end # h.post2( ... ) end # timeout( ... ) puts "Site verified OK" rescue TimeoutError $stderr.puts "xxxx.xxxxx.xxx not responding" exit 1 rescue SiteError $stderr.puts "Exception caught: SiteError: #{$!}" exit 1 end --=20 Jason DiCioccio - geniusj@bsd.st - PGP Key @ http://bsd.st/~geniusj/pgpkey.= asc PGP Key Fingerprint C442 04E2 26B0 3809 8357 96AB D350 9596 0436 7C08 --XOIedfhf+7KOe/yw Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: PGP 6.5.8 iQA/AwUBO7D5L9NQlZYENnwIEQJiawCgvlYd+f9Eks1zLCVbLB6Wa6oBr7sAnRI/ CqoacUxWO75GryK7x3YF3xU1 =QSCh -----END PGP SIGNATURE----- --XOIedfhf+7KOe/yw--