Ruby TCPSocket / HTTP请求

时间:2011-12-27 22:17:57

标签: ruby tcpsocket

我刚开始使用TCPSockets。我只想尝试获取谷歌主页。这是我的代码:

require 'socket'

host = 'http://www.google.com'
port = 80

s = TCPSocket.open host, port
s.puts "GET / HTTP/1.1\r\n"
s.puts "Host: Firefox"
s.puts "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
s.puts "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"
s.puts "\r\n"

while line = s.gets
  puts line.chop
end


s.close

返回:

HTTP/1.1 302 Document has moved
Location: http://92.242.140.29/?nxdomain=http%3A%2F%2Ffirefox&AddInType=2&PlatformInfo=pbrgen

为什么呢?我的目标是获取谷歌主页的内容。感谢

2 个答案:

答案 0 :(得分:6)

require 'socket'

host = 'www.google.com'
port = 80

s = TCPSocket.open host, port
s.puts "GET / HTTP/1.1\r\n"
s.puts "\r\n"

while line = s.gets
  puts line.chop
end

s.close

此外,使用真正的HTTP客户端将使您的生活变得更加轻松。我喜欢Typhoeus

答案 1 :(得分:0)

302 status是一种HTTP重定向,但在这里你正在使用TCP,一个HTTP下面的网络层,它不了解重定向(或其他任何HTTP)。 As this SO post shows,howerver,还有其他方式来请求网页,即使用OpenURI库而不是套接字。