--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 actually
since it works on my OS X box fine.
Basically, I get this output when running a monitor script I wrote (code will
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=awsn&aws=mVbsIrCW2kZtLKee&awr=1
/usr/local/lib/ruby/1.6/net/protocol.rb:631:in `sysread': End of file reached (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 work
on one platform and not another? One thing to note is that I did install ruby
from the ports collection on the BSD box. If there is a workaround I can do in
the mean time, let me know :-)
Thanks in advance,
-JD-
#!/usr/local/bin/ruby
###############################################################################
# XXXXXX 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 = "http", "xxxx.xxxxxx.xxx", 8081, "/Ariba"
# Gather args from command line if necessary
if %r!(https?)://(.*?)(?::(\d+))?(\.*)! =~ ARGV[0]
scheme = $1
host = $2
port = $3 ? $3.to_i : ((scheme == http) ? 80 : 443)
path = $4
end
PostData = Struct.new( "PostData", :name, :password, :sid )
postValues = PostData.new( nil, nil, nil )
# Fetch the requested document
h = Net::HTTP.new(host, port)
h.use_ssl = true if scheme == "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 = nil ) do |recv|
inputLines = recv.body.to_s
result = inputLines.scan(/.*grpFV">/)
puts "Data retrieved, getting username value for posting . . ."
postValues.name = result[0].scan("([0123456789]+)")[0]
puts "Getting password value for posting . . ."
postValues.password = result[1].scan("([0123456789]+)")[0]
# Get the session ID
puts "Getting the new session ID for posting . . ."
result = inputLines.scan(/"aws".*/)[0]
result = result.scan(/value="(.*)"/)[0]
postValues.sid = 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}=jdoe&#{postValues.passwor
d}=feh&timezone=420&timezoneFeb=480&timezoneAug=420&900=awsnf&awfid=true&aws=#
{postValues.sid}&awr=1&awscratch=&awcharset=8859_1&90131100.x=0&90131100.y=0" )
do |recv|
# We have the new location, now go fetch the correct page
raise SiteError, "Did not receive 302 from the application" if recv.header
['Location'] == nil
puts "Received 302 redirect from server . . ."
puts "Searching for the magic string . . ."
path = recv.header['Location']
puts path
h.get2( path, header = 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
--
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
Ch
-----END PGP SIGNATURE-----
--XOIedfhf+7KOe/yw--