Ruby TCPSocket / HTTP-запрос

Я только начал с TCPSockets. Я просто пытаюсь получить главную страницу Google. Это мой код:

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

Зачем? Моя цель - получить содержимое главной страницы Google. Спасибо

2 ответа

Решение
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.

Состояние 302 - это тип перенаправления HTTP, но здесь вы работаете с TCP, сетевым уровнем ниже HTTP, который не понимает перенаправления (или что-либо еще HTTP). Как показано в этой публикации, однако, есть и другие способы запроса веб-страницы, а именно использование библиотеки OpenURI вместо сокетов.

Другие вопросы по тегам