|
.NET TIPS WebRequest/WebResponseクラスでPOSTメソッドによりデータを送信するには?デジタルアドバンテージ 遠藤 孝信2005/07/01 |
![]() |
|
|
|
「TIPS:WebRequest/WebResponseクラスでWebページを取得するには?」では、GETメソッドによるWebページの取得について解説しているが、本稿では、POSTメソッドによりWebページにデータを送信してアクセスする方法について解説する。
POSTメソッドによるアクセスの手順
WebRequestクラス/WebResponseクラス(ともにSystem.Net名前空間)を使用してGETメソッドによりWebページにアクセスするには、上記のTIPSで示しているように、基本的には次のような処理の流れになる。
1. WebRequestクラスによりリクエスト(HttpWebRequestオブジェクト)を作成
2. GetResponseメソッドによりレスポンス(WebResponseオブジェクト)を取得
3. GetResponseStreamメソッドにより得たストリームから結果を取得
POSTメソッドによりデータ(以降、ポスト・データ)を送信する場合には、リクエストであるHttpWebRequestオブジェクトに対して、以下のような設定が上記1.と2.の間に必要となる。
1.1. Methodプロパティを「POST」に設定(デフォルトは「GET」)
1.2. ContentTypeプロパティを「application/x-www-form-urlencoded」に設定して、ポスト・データのコンテンツ・タイプを指定
1.3. ContentLengthプロパティに送信するポスト・データの長さを設定
1.4. GetRequestStreamメソッドにより得たストリームに対してポスト・データを書き込む
以下に実際のWebページの例を取り上げながら、これらの詳細を解説していく。
Google翻訳機能で送信されるデータ
ここでは、Googleが提供している翻訳機能(現時点ではBETA版)にアクセスするプログラムを作成してみる。Google翻訳機能では、以下のようなページにより、さまざまな言語間での機械翻訳を実行することができる。
![]() |
| Googleが提供している翻訳機能(BETA) |
| この画面では、日本語の文章を英語に機械翻訳している。[Translate text]に翻訳したい日本語を入力し、[from]で「Japanese to English BETA」を選択し、[Translate]ボタンをクリックして翻訳を実行する。 |
Google翻訳機能ページのソース(HTMLデータ)を見ると、翻訳したい文章を入力する部分のフォームは次のようになっている。
|
|
| Google翻訳機能ページのHTML(抜粋) | |
| <textarea>タグがテキストボックス、<select>タグがコンボボックス、最後の<input type=submit value="Translate">タグが[Translate]ボタンを記述している。 |
このフォームでは、以下の表に示した4つのデータを、「http://translate.google.com/translate_t」に対してポスト(送信)していることになる。
| パラメータ名 | 値 | 内容 |
| text | 翻訳したい文字列 | UTF-8でエンコードが必要 |
| langpair | ja|en | 日本語から英語へ翻訳する場合の値 |
| hl | en | 結果ページで使用される言語 |
| ie | UTF8 | 入力文字列の文字コード |
| Google翻訳機能ページでポストされる4つのデータ | ||
| これらの各データの内容は筆者が独自に調査したものであり、将来的に変更される可能性がある。 | ||
プログラムからGoogle翻訳機能を利用する場合には、これらのデータをポスト・データとして作成し、上記のURLにアクセスすればよい。
ポスト・データの作成と書き込み
フォームで入力されたデータがWebページに送信される場合、そのデータの形式(コンテンツ・タイプ)にはいくつかの種類があるが、デフォルト(<form>タグのenctype属性で特に指定されていない場合)の形式が「application/x-www-form-urlencoded」という形式である(詳細については「HTML 4.01 Specification」の「17.13.4 Form content types」などを参照)。
これは、「パラメータ名と値」を=記号でペアにし、各ペアを&記号で連結する形式だ(日本語や一部の記号についてはエンコードが必要となる。このエンコードについては「TIPS:文字列をURLエンコードするには?」を参照)。
つまりGoogle翻訳機能の場合には、以下のようなポスト・データが送信されることになる。
text=<エンコードした文字列>&langpair=ja|en&hl=en&ie=UTF8
プログラムからアクセスする場合には、このような文字列を作成して送信すればよい。具体的には、この文字列をバイト列に変換してから、リクエストであるHttpWebRequestオブジェクトのGetRequestStreamメソッドにより得たストリームに対して書き込む。
上記のような文字列が文字列変数paramに入っているとすると、このためのコードは次のようになる(C#の場合。VB.NETの場合は以下のサンプル・プログラムを参照)。
byte[] data = Encoding.ASCII.GetBytes(param);
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
文字列のバイト列への変換については「TIPS:文字列をシフトJISとしてバイト列に変換するには?」で解説している。
Google翻訳機能により翻訳を行うサンプル・プログラム
以下に、Google翻訳機能を使って日本語の文字列を英語に翻訳するサンプル・プログラムを示す。
なお、このプログラムではポスト・データとなる文字列の作成を分かりやすく記述するためにハッシュテーブルを利用している。これについては「TIPS:ハッシュテーブル(連想配列)を使うには?」で解説している。
|
|
| Google翻訳機能により日英翻訳を行うC#のサンプル・プログラム(jetrans.cs) | |
|
|
| Google翻訳機能により日英翻訳を行うVB.NETのサンプル・プログラム(jetrans.vb) | |
結果ページ(レスポンス)の取得についてはGETメソッドを使う場合と同様であるため、詳しくは「TIPS:WebRequest/WebResponseクラスでWebページを取得するには?」を参照していただきたい。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ネットワーク 使用ライブラリ:WebRequestクラス(System.Net名前空間) 使用ライブラリ:WebResponseクラス(System.Net名前空間) 使用ライブラリ:HttpWebRequestクラス(System.Net名前空間) 使用ライブラリ:HttpUtilityクラス(System.Web名前空間) 使用ライブラリ:Hashtableクラス(System.Collections名前空間) 関連TIPS:WebRequest/WebResponseクラスでWebページを取得するには? 関連TIPS:文字列をURLエンコードするには? 関連TIPS:文字列をシフトJISとしてバイト列に変換するには? 関連TIPS:ハッシュテーブル(連想配列)を使うには? |
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



