SQLの窓

2013年10月29日


Framework4.5(C#)ストア : HttpClient で Post と Get する汎用 static クラス

UrlEncode をキャラクタセットを指定して送れるようになっています。受信データは、Content-Type でキャラクタセットが指定されておれば、自動的に変換されています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace winofsql {

	class Tool {

		// 戻される文字列は、サーバー側で Content-Type に Charset が
		// 指定されておれば自動変換されます

		// *********************************************
		// UTF-8 POST
		// *********************************************
		public static async Task<string> Post(string url, Dictionary<string, string> param) {
			string result = "";

			try {
				HttpClient httpClient = new HttpClient();
				httpClient.MaxResponseContentBufferSize = int.MaxValue;
				HttpContent content = new FormUrlEncodedContent(param);
				var response = await httpClient.PostAsync(url, content);
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// エンコード指定 POST
		// *********************************************
		public static async Task<string> Post(string url, string encoding, Dictionary<string, string> param) {
			string result = "";
			string query_string = "";
			byte[] data1 = null;
			byte[] data2 = null;
			string data3 = null;

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "";
				}
				else {
					query_string += "&";
				}

				data1 = Encoding.GetEncoding(encoding).GetBytes(kvp.Value);
				data2 = WebUtility.UrlEncodeToBytes(data1, 0, data1.Length);
				data3 = Encoding.GetEncoding(encoding).GetString(data2, 0, data2.Length);
				query_string += kvp.Key + "=" + data3;
			}

			try {

				HttpClient httpClient = new HttpClient();
				HttpContent content = new StringContent(query_string);
				content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
				var response = await httpClient.PostAsync(url, content);
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// URL のみ呼び出し GET
		// *********************************************
		public static async Task<string> Get(string url) {
			string result = "";

			HttpClient httpClient = new HttpClient();

			HttpResponseMessage response = null;
			try {
				response = await httpClient.GetAsync(url);
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}
			// 接続に失敗
			if (response == null) {
				return result;
			}

			try {
				response.EnsureSuccessStatusCode();
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}
			// HTTP 応答の失敗
			if (!response.IsSuccessStatusCode) {
				return result;
			}

			// 内容を文字列として取得
			try {
				String text = await response.Content.ReadAsStringAsync();

				result = text;
			}
			catch (Exception Err) {
				result = "ERROR: " + Err.Message;
			}

			return result;

		}

		// *********************************************
		// データ呼び出し( UTF-8 ) GET
		// *********************************************
		public static async Task<string> Get(string url, Dictionary<string, string> param) {

			string query_string = "";

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "?";
				}
				else {
					query_string += "&";
				}
				query_string += kvp.Key + "=" + WebUtility.UrlEncode(kvp.Value);
			}

			return await Get(url + query_string);

		}

		// *********************************************
		// データ呼び出し( エンコード指定 ) GET
		// *********************************************
		public static async Task<string> Get(string url, string encoding, Dictionary<string, string> param) {

			string query_string = "";
			byte[] data1 = null;
			byte[] data2 = null;
			string data3 = null;

			foreach (KeyValuePair<string, string> kvp in param) {
				if (query_string == "") {
					query_string += "?";
				}
				else {
					query_string += "&";
				}
				data1 = Encoding.GetEncoding(encoding).GetBytes(kvp.Value);
				data2 = WebUtility.UrlEncodeToBytes(data1, 0, data1.Length);
				data3 = Encoding.GetEncoding(encoding).GetString(data2, 0, data2.Length);

				query_string += kvp.Key + "=" + data3;
			}

			return await Get(url + query_string);

		}

	}
}


呼び出し
string result = await winofsql.Tool.Post(
	"http://localhost/lightbox/sample/test.php",
	"shift_jis",
	new Dictionary<string, string>() { { "field1", "日本語" }, { "field2", "表示" } });

if (result.PadRight(5).Substring(0, 5) == "ERROR") {
	Debug.WriteLine(result);
}

関連する記事

Framework4(C#) : WebClient で Post と Get する汎用 static クラス
Framework4(C#) : Windows Phone OS 7.1 : WebClient で Post と Get する汎用 static クラス
Android で Post と Get


【Win8 ストアアプリの最新記事】
posted by lightbox at 2013-10-29 21:02 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり