.NET POST на страницу PHP

Я пытаюсь реализовать очень простую систему из моего приложения на C# .NET, которая отправляет IP-адрес компьютера для authenticate.php на моем веб-сервере. Страница php проверит этот IP-адрес в базе данных и ответит "да" или "нет".

Прошло много времени с тех пор, как я работал с PHP, и я немного запутался. Вот как выглядит моя.NET-функция.

public static bool IsAuthenticated()
{
    string sData = getPublicIP();
    Uri uri = new Uri("http://www.mysite.com/authenticate.php");
    if (uri.Scheme == Uri.UriSchemeHttp)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = WebRequestMethods.Http.Post;
        request.ContentLength = sData.Length;
        request.ContentType = "application/x-www-form-urlencoded";

        // POST the data to the authentication page
        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(sData);
        writer.Close();

        // Retrieve response from authentication page
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string sResponse = reader.ReadToEnd();
        response.Close();

        if (sResponse == "yes")
        {
            Console.WriteLine("Authentication was Successful.");
            return true;
        }
        else
        {
            Console.WriteLine("Authentication Failed!");
            return false;
        }
    }
}

Так будет ли переменная POST $_POST['sData']; и как мне ответить на мою заявку с результатом?

1 ответ

Решение

Принимая значение sData является (скажем) "10.1.1.1", то вы в настоящее время не публикуете правильные данные формы в первую очередь. Имя переменной не является частью текста, написанного

 writer.Write(sData);

Вам нужно сделать что-то вроде:

 string postData = "ipaddress=" + sData;

а затем использовать ipaddress параметр формы в вашем PHP.

Также обратите внимание, что вы должны указывать длину двоичного содержимого, которая может не совпадать с длиной строки в символах. Конечно, это нормально, если строка здесь полностью ASCII, что я ожидаю, если это IP-адрес... но это стоит иметь в виду для других целей. (Точно так же вы обычно должны иметь в виду любые символы, которые нуждаются в специальной кодировке.)

Также обратите внимание, что было бы лучше использовать using заявления для StreamWriter, HttpResponse и т.д., чтобы убедиться, что все закрывается, даже если выдается исключение.

Другие вопросы по тегам