※ ChatGPTを利用し、要約された質問です(原文:C#のGUIからサーバー側のPHPへ文字列を送信)
C#のGUIからサーバー側のPHPへ文字列を送信するプログラムについて
このQ&Aのポイント
C#のGUIからサーバー側のPHPへ文字列を送信するプログラムを作成中です。質問箇所は、C# GUI側のコードでURLエンコードされた文字列をアスキーコードに変換している箇所です。このアスキーコードはPHP側で復元され、さらにURLデコードされてマルチバイト文字にまで復元されます。詳細についてお知恵をいただきたいです。
C#のGUIからサーバー側のPHPへ文字列を送信するプログラムを作成中です。具体的には、C#のGUI側ではURLエンコードされた文字列をアスキーコードに変換し、そのままHTTPリクエストを送信しています。一方、PHP側では受け取ったアスキーコードをURLデコードして元の文字列に戻しています。この処理の意図や必要性について教えてください。
C#のGUIからサーバー側のPHPへ文字列を送信するプログラムを作成中です。その過程でC#側でURLエンコードされた文字列をアスキーコードに変換して送信していますが、PHP側で受け取ったアスキーコードは自動的にURLデコードされ、元の文字列に復元されます。この処理の意味や理由について詳しく教えてください。
するプログラムを作っている途中で疑問箇所があります。
まず、クライアントというか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してマルチバイトの文字の状態にまで復元して表示しているということなのでしょうか?
識者の方ご教授ください。
よろしくお願いします。
お礼
ありがとうございます。 参考にします。(