C#のGUIからサーバー側のPHPへ文字列を送信
するプログラムを作っている途中で疑問箇所があります。
まず、クライアントというかC# GUI側のコードなのですが
以下、実際にHTTPリクエストを送る箇所のみですが
this.postData = "value=" + HttpUtility.UrlEncode(this.box_01.Text,this.encode) + "&key=" + HttpUtility.UrlEncode(this.box_02.Text,this.encode);
//this.postData = "test=日本語テスト";
//==========================================================
//バイト配列型に変換※URLエンコード済みの文字列をアスキー文字列に変換
//==========================================================
this.postDataBytes = Encoding.ASCII.GetBytes(this.postData);
MessageBox.Show(this.postData);
//MessageBox.Show(this.postDataBytes);
string temp = "";
for(int i = 0; i < this.postDataBytes.Length; i ++){
temp += (char)postDataBytes[i];
}
MessageBox.Show(HttpUtility.UrlDecode(temp)); //デバッグ
//引数に通信先URLを指定してWebRequestクラスのインスタンスを作成
//httpリクエストインスタンスを作成
this.http = WebRequest.Create (url);
this.http.Method = "POST"; //メソッドの指定
this.http.ContentType = "application/x-www-form-urlencoded"; //ContentTypeの指定(※必須)
//送信するデータの長さを指定
this.http.ContentLength = this.postDataBytes.Length;
MessageBox.Show(this.http.ContentLength.ToString());
//データ送信用のストリーム
this.requestStream = http.GetRequestStream();
//送信するデータを書き込む
this.requestStream.Write(this.postDataBytes,0,this.postDataBytes.Length);
//送信終了
this.requestStream.Close();
//サーバーからの応答を取得
this.response = http.GetResponse();
Stream reponseStream = this.response.GetResponseStream();
StreamReader sr = new StreamReader(reponseStream,this.encode);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
MessageBox.Show (this.box_01.Text);
まずGUI側の流れとしてはFormの中に二つのTextBoxを配置し二つの入力された値を
urlencodeして一般的?なHTTPリクエストのクエリ状態にしてます。
で途中で this.postDataBytes = Encoding.ASCII.GetBytes(this.postData);
という処理の箇所で、Urlencodeした文字列をアスキーコード?に変換しているようです。
実際に、コンソールに出力して、文字列が数字のみの配列になったのを確認しました。
そのまま、StreamWriterで書き込み・・送信しています。
で最終的にPHP側にHTTPリクエストして、レスポンスをMessageBoxで表示させます。
PHP側のソースですが
<?php
//$str = urldecode($_POST["value"]);
$str = $_POST["value"];
$str_01 = $_POST["key"];
$fp = fopen("./sharp.txt","w+");
fwrite($fp,$str.$str_01);
print "あなたの入力した内容は". $str."ですね\r\n";
print "keyの値は".$str_01."ですね";
?>
という記述をしており最終的にGUIのMessageBoxに表示されるのは
print "あなたの入力した内容は". $str."ですね\r\n";
print "keyの値は".$str_01."ですね";
この部分に、入力した値がはいった文字列が表示されます。
で上記の流れの中で、C#側で途中Urlencodeしてそれをアスキーコードに変換してます。
そのアスキー文字をPHP側にリクエストしているのですが、これってPHP側で勝手にアスキー文字をもとのurlencodeの状態に復元し、さらにurldecodeしてマルチバイトの文字の状態にまで復元して表示しているということなのでしょうか?
識者の方ご教授ください。
よろしくお願いします。
お礼
回答ありがとうございます。 自分でもデバッグ等して問題ないことを確認したのですが、 見落としや知識不足によるミスがないか不安になり投稿しました。 回答をいただけて安心しました。 ありがとうございました。