C#で簡単にPOST送信する方法を解説!
- システム
エンジニア - C#でPOST送信するにはどのようにすればいいのでしょうか。
- プロジェクト
マネージャー - それでは、C#でPOST送信する方法について説明いたしましょう。
C#によるPOST送信とは
C#によるPOST送信の方法を解説する前に、まずPOSTとは何なのかを簡単に説明します。インターネットではHTTPと言うプロトコル(通信のルール)が使用されていますが、HTTPのデータの送信方法にはGETとPOSTの2種類があります。
GETの場合はURLにパラメータが付与されています。URLの後ろの方に?id=123¶m1=456¶m2=789…のように文字が連なっていることがありますが、これがGET送信のパラメータです。
対してPOST送信はそれが無く、パスワードなど見せたくないパラメータを目に見えないように送ることが出来るのです。今回はC#によるPOST送信の方法を解説しましょう。
WebRequestを使用したPOST送信のサンプル
以下がC#によるPOST送信のサンプルです。なおソースの先頭には、
using System.Text;
using System.Web;
using System.Net;
using System.IO;
を記述してください。
Encoding encode = Encoding.GetEncoding(“UTF-8”);
string postStr = “param1=” + HttpUtility.UrlEncode(“第一パラメーター”, encode)
+ “¶m2=” + HttpUtility.UrlEncode(“第二パラメーター”, encode);
byte[] postBytes = Encoding.ASCII.GetBytes(postStr);
WebRequest request = WebRequest.Create(“http://(どこかのWebサイトのURL)”);
request.Method = “POST”;
request.ContentLength = postBytes.Length;
request.ContentType = “application/x-www-form-urlencoded”;
Stream reqStream = request.GetRequestStream();
// 送信する
reqStream.Write(postBytes, 0, postBytes.Length);
reqStream.Close();
// 受信する
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream, encode);
Console.WriteLine(reader.ReadToEnd());
reader.Close();
POST送信用のパラメータを作成し、WebRequestを生成する
上のC#サンプルを解説します。まずUTF-8の文字コードで文字列変数のpostStrにPOST送信するパラメータを設定しています。「パラメータ名=パラメータの値」を&でつなげば複数設定することができます。
そしてpostStrをアスキーコード変換してバイト型配列postBytesにします。次にPOST送信するURLを設定したWebRequestを生成します。
送信前にプロトコルメソッドやContentTypeを設定
WebReqeustのMethodにはプロトコルメソッドの”POST”、ContentLengthには送信バイト数としてpostBytesの長さ、ContentTypeには”application/x-www-form-urlencoded”を設定しています。
この長い文字列はテキスト送信をするためのシンプルなContentTypeで、&や=でパラメータを設定するルールはこれによって定められています。なおバイナリファイルをアップロードする場合は”multipart/form-data”が使用されます。
Writeで送信し、その後GetResposeで応答を受け取る
そしてWebRequestのGetRequestStreamで出力Streamを取得し、Writeで送信します。送信後はCloseします。その後、GetResponse()でレスポンス(応答)を取得して、その結果を表示しています。
これを実行すると、WebRequest.Createで指定したURLのWebサイトのHTMLソースが表示されます。ただし文字コードがUTF-8ではなくShift_JISなどのサイトの場合は、日本語は文字化けしてしまうでしょう。
Webサイトの文字コードはUTF-8を使用するべき
このC#サンプルの最初でEncoding.GetEncoding(“Shift_JIS”);とすればShift_JISにも対応できます。ただし.Net FrameworkはバージョンによってはShift_JISに対応していません。日本向けのWindowsPCで動かしていてもそういったケースがあります。
非対応の.NetでShift-JISを使うには追加設定が必要で、少し手間がかかります。またインターネットは世界中に公開されるのですから、UTF-8などの世界標準の文字コードを使うべきです。
例えばWordPressでブログを作成するとUTF-8で作成されます。そういった理由でShift-JISでWebサイトを作るのは避けた方がよいでしょう。
POSTパラメータの内容をPHPで確認する
ここまで読んで、「これではPOSTで正しくパラメータを送れたかどうかわからない」と思う人が多いでしょう。それを確認するにはサーバ側でテスト用のページを作る必要があります。
レンタルサーバやXAMPP環境がある人は、以下のPHPコードをサーバに置いて、今回のC#サンプルのWebRequest.CreateにURLを指定してアクセスしてください。
<html>
<head>
<meta charset=”UTF-8″>
<title>Test Page</title>
</head>
<body>
<?php
echo $_POST[“param1”] . “<br />” . $_POST[“param2”];
?>
</body>
</html>
WebClientを使うとコンパクトに
今回のC#サンプルで上のPHPのページにアクセスすると、「第一パラメーター<br />第二パラメーター」と返ってきます。サーバにPOSTのパラメータparam1とparam2が正しく送信されていることが確認できますね。
なおここまでのC#サンプルはWebClientを使うと以下のようにコンパクトに書けます。ただし文字コードはUTF-8限定となります。ソースの先頭には「using System.Collections.Specialized;」を記述してください。
WebClient client = new WebClient();
NameValueCollection collection = new NameValueCollection();
collection.Add(“param1”, “第一パラメーター”);
collection.Add(“param2”, “第二パラメーター”);
byte[] resBytes = client.UploadValues(“http://(どこかのWebサイトのURL)”, collection);
client.Dispose();
Console.WriteLine(Encoding.UTF8.GetString(resBytes));
- システム
エンジニア - ありがとうございます。よくわかりました。
- プロジェクト
マネージャー - C#ならPOST送信を簡単にインターネットの通信が行えるようになります。
C#ならPOST送信を簡単に行える
C#によるPOST送信を紹介しました。
意外と簡単にインターネットの通信が行えると感じたと思われます。
是非C#でインターネットのWebサイトにアクセスする便利なプログラムを作成してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)