mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	https://github.com/ruby/ruby/pull/364 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# simple webpage fetcher
 | 
						|
 | 
						|
# The code demonstrates how a multi-protocol client should be written.
 | 
						|
# TCPSocket is using getaddrinfo() internally, so there should be no problem.
 | 
						|
 | 
						|
require "socket"
 | 
						|
 | 
						|
if ARGV.size != 1
 | 
						|
  STDERR.print "requires URL\n"
 | 
						|
  exit
 | 
						|
end
 | 
						|
 | 
						|
url = ARGV[0]
 | 
						|
if url !~ /^http:\/\/([^\/]+)(\/.*)$/
 | 
						|
  STDERR.print "only http with full hostname is supported\n"
 | 
						|
  exit
 | 
						|
end
 | 
						|
 | 
						|
# split URL into host, port and path
 | 
						|
hostport = $1
 | 
						|
path = $2
 | 
						|
if (hostport =~ /^(.*):([0-9]+)$/)
 | 
						|
  host = $1
 | 
						|
  port = $2
 | 
						|
else
 | 
						|
  host = hostport
 | 
						|
  port = 80
 | 
						|
end
 | 
						|
if host =~ /^\[(.*)\]$/
 | 
						|
  host = $1
 | 
						|
end
 | 
						|
 | 
						|
#STDERR.print "url=<#{ARGV[0]}>\n"
 | 
						|
#STDERR.print "host=<#{host}>\n"
 | 
						|
#STDERR.print "port=<#{port}>\n"
 | 
						|
#STDERR.print "path=<#{path}>\n"
 | 
						|
 | 
						|
STDERR.print "conntecting to #{host} port #{port}\n"
 | 
						|
c = TCPSocket.new(host, port)
 | 
						|
dest = Socket.getnameinfo(c.getpeername,
 | 
						|
    Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)
 | 
						|
STDERR.print "conntected to #{dest[0]} port #{dest[1]}\n"
 | 
						|
c.print "GET #{path} HTTP/1.0\n"
 | 
						|
c.print "Host: #{host}\n"
 | 
						|
c.print "\n"
 | 
						|
while c.gets
 | 
						|
  print
 | 
						|
end
 |