私は現在、php / MySQLオンラインシステムに接続するためのC#アプリケーションを作成しています。アプリケーションは、投稿データをスクリプトに送信し、応答を取得する必要があります。
以下のデータを送信すると
username = test&password = test
次の応答があります...
2010年4月22日12:15:42にリクエストを開始 リクエストの作成が完了しました:00:00:00.0570057かかりました 2010年4月22日12:15:42にデータを送信 データを送信しました:00:00:06.9316931を取りました<<- 2010年4月22日12:15:49に応答を取得 応答の取得00:00:00.0360036 終了した応答00:00:00.0360036 通話全体に00:00:07.0247024かかりました
実際にスクリプトにデータを送信するのに6秒かかることがわかるように、telnetからデータを送信し、ローカルファイルからURLに投稿データを送信することでさらにテストを行いました。1秒もかからないので、これはサイトでホストされているスクリプトに問題はありません。
2つの単純な文字列であるのに、なぜデータの送信に6秒かかるのですか?
カスタムクラスを使用してデータを送信します
class httppostdata
{
WebRequest request;
WebResponse response;
public string senddata(string url, string postdata)
{
var start = DateTime.Now;
Console.WriteLine("Starting request at " + start.ToString());
// create the request to the url passed in the paramaters
request = (WebRequest)WebRequest.Create(url);
// set the method to post
request.Method = "POST";
// set the content type and the content length
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postdata.Length;
// convert the post data into a byte array
byte[] byteData = Encoding.UTF8.GetBytes(postdata);
var end1 = DateTime.Now;
Console.WriteLine("Finished creating request : took " + (end1 - start));
var start2 = DateTime.Now;
Console.WriteLine("Transmitting data at " + start2.ToString());
// get the request stream and write the data to it
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteData, 0, byteData.Length);
dataStream.Close();
var end2 = DateTime.Now;
Console.WriteLine("Transmitted the data : took " + (end2 - start2));
// get the response
var start3 = DateTime.Now;
Console.WriteLine("Getting the response at " + start3.ToString());
response = request.GetResponse();
//Console.WriteLine(((WebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
var end3 = DateTime.Now;
Console.WriteLine("Getting response " + (end3 - start3));
// read the response
string serverresponse = reader.ReadToEnd();
var end3a = DateTime.Now;
Console.WriteLine("Finished response " + (end3a - start3));
Console.WriteLine("Entire call took " + (end3a - start));
//Console.WriteLine(serverresponse);
reader.Close();
dataStream.Close();
response.Close();
return serverresponse;
}
}
そしてそれを私が使う
private void btnLogin_Click(object sender, EventArgs e)
{
// string postdata;
if (txtUsername.Text.Length < 3 || txtPassword.Text.Length < 3)
{
MessageBox.Show("Missing your username or password.");
}
else
{
string postdata = "username=" + txtUsername.Text +
"&password=" + txtPassword.Text;
httppostdata myPost = new httppostdata();
string response = myPost.senddata("http://www.domainname.com/scriptname.php", postdata);
MessageBox.Show(response);
}
}