2011-12-27 25 views
2

私はTCPSocketを使い始めました。私は単にgoogleのホームページを取得しようとしています。これは私のコードです:Ruby TCPSocket/HTTPリクエスト

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ホームページのコンテンツを取得することです。ありがとう

答えて

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

こんにちは、 "あなたのブラウザはこのサーバが理解できないリクエストを送信しました"という400のBad Requestとhtmlボディを取得します。 – 0xSina

+0

'puts'メソッドは' \ n'を追加します。 。代わりに 's.send(msg、0)'を使って問題を解決してください。 –

0

302 statusはHTTPリダイレクトの一種ですが、ここではリダイレクト(またはその他のHTTP)を理解できないHTTPより下位のネットワーク層であるTCPを使用しています。 As this SO post shows、howerver、Webページをリクエストする他の方法、つまりソケットの代わりにOpenURIライブラリを使う方法があります。

関連する問題