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
}