Ruby 資料一覧
ネットワーク
2007/11/7更新
対応バージョン: 1.8
簡単なTCPサーバを作成する
TCPServerクラスを使用する。
例) daytimeサーバのように現在日時を返す
require 'socket' s_port = 8888 # 待ち受けポート s = TCPServer.new(s_port) # サーバ側ソケット生成 loop { # 処理ループ c = s.accept # 接続受付 Thread.start { # 入出力(スレッド内) c.print Time.now.strftime("%c") # 現在日時出力 c.close # 接続終了 } }
簡単なHTTPクライアントを作成する
HTTPクライアントを作成するには'net/http'を使うと便利だが、'socket'を使うことで、より汎用的なTCP/IPクライアントが作成できる。
require 'socket' s = TCPSocket.new("foo.bar.com", 80) # ソケットを開く s.print "GET / HTTP/1.0\r\n\r\n" # ソケットにGETリクエスト送信 print s.read # ソケットからメッセージを読み込み出力 s.close # ソケットを閉じる
Proxy経由でHTTPリクエストを送信する
Net::HTTP::Proxyを使用して以下のようにする。
require 'net/http' to_host = "foo.bar.com" req = "/index.html" Net::HTTP::Proxy(proxy_host,proxy_port).start(to_host) {|http| response = http.get(req) print response.body }
proxy_hostがnilの場合はNet::HTTPそのものを返すのでProxy環境以外でも正常に動作する。
例えばproxy_host,proxy_portを環境変数HTTP_PROXY等から取得するようにしておけば、Proxy有/無のどちらの環境でも同一ソースで動作する。
トラックバックを送信する
トラックバック送信は送信元データに関する以下の情報をHTTPのPOSTメソッドに載せて送信先URLに送ることで可能となる。
title
記事タイトル
excerpt
記事要約
url
記事URL
blog_name
ブログタイトル
以下にRubyによりトラックバック送信機能の実装例を示す。
require 'net/http' require 'cgi' # # パラメータ設定 # title = "XXXについて" # 記事タイトル excerpt = "XXXは本来こういうもので..." # 記事要約 url = "http://www.from.net/item/12" # 記事URL name = "Myブログ" # ブログタイトル to_host = "www.to.net" # 送信先ホスト to_path = "/recv.cgi/45" # 送信先パス # # トラックバック送信 # req = "title=#{title}&" \ # 送信パラメータ生成 + "excerpt=#{excerpt}&" \ + "url=#{url}&" \ + "blog_name=#{name}" req = CGI.escape(req) # URLエンコード Net::HTTP.start(to_host) {|http| # トラックバック送信 response = http.post(to_path, req) }
英文メールを送信する
英文メールを送信するには'net/smtp'を使うと便利である。
require 'net/smtp' require 'time' # # 各種設定 # smtp_server = "<SMTPサーバ>" helo_domain = "<HELOドメイン>" from_addr = "<Fromアドレス>" to_addr = "<Toアドレス>" subject = "<件名>" date = Time.now.rfc2822 msg_id = "<メッセージID>" msg = "<本文>" # # メールデータ作成 # mail_data = <<EOD From: #{from_addr} To: #{to_addr} Subject: #{subject} Date: #{date} Message-Id: #{msg_id} #{msg} EOD # # メール送信 # Net::SMTP.start(smtp_server, 25, helo_domain) {|smtp| smtp.send_mail mail_data, from_addr, to_addr }