/**
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.common.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Enumeration;
import java.util.Properties;

/**
 * HTTPリクエスト送信ユーティリティ
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class HttpRequestSender {
	/**
	 * 指定URLに対してPOSTで送信
	 * @param url 接続先URL
	 * @param data 送信するデータ(文字列)
	 * @return HTTPサーバーからのレスポンス
	 * @throws IOException 通信エラー
	 */
	public static InputStream post(String url, String data) throws IOException {
		URL server = new URL(url);
		URLConnection con = server.openConnection();
		con.setDoOutput(true);

		PrintWriter pw = new PrintWriter(con.getOutputStream());
		pw.print(data);
		pw.flush();
		pw.close();

		return con.getInputStream();
	}
	/**
	 * プロパティをURLエンコードに変換して返す
	 * @param parameters プロパティ
	 * @param encoding エンコーディング
	 * @return URLエンコードされた文字列
	 */
	public static String urlEncodeAll(Properties parameters, String encoding) throws UnsupportedEncodingException {
		Enumeration e = parameters.keys();
		StringBuffer sb = new StringBuffer();

		while(e.hasMoreElements()) {
			String key = (String)e.nextElement();
			String value = (String)parameters.get(key);

			if(sb.length() > 0) {
				sb.append("&");
			}
			sb.append(urlEncode(key, value, encoding));
		}

		return sb.toString();
	}
	/**
	 * URL形式にエンコードした文字列を返す
	 * @param key キー
	 * @param value 値
	 * @param encoding エンコーディング
	 * @return エンコードされた文字列
	 */
	public static String urlEncode(String key, String value, String encoding) throws UnsupportedEncodingException {
		return URLEncoder.encode(key, encoding) + "=" + URLEncoder.encode(value, encoding);
	}
}
