C# .NET发布到PHP页面

C# .NET发布到PHP页面,c#,php,.net,basic-authentication,C#,Php,.net,Basic Authentication,我试图从我的C#.NET应用程序中实现一个非常基本的系统,它将机器的IP地址发送到web服务器上的authenticate.php。php页面将根据数据库检查此IP地址,并以“是”或“否”进行回复 我已经很久没有使用PHP了,我有点困惑。下面是我的.NET函数的外观 public static bool IsAuthenticated() { string sData = getPublicIP(); Uri uri = new Uri("http://www.mysite.co

我试图从我的C#.NET应用程序中实现一个非常基本的系统,它将机器的IP地址发送到web服务器上的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'];那么我如何用结果回复我的申请呢?

假设
sData
的值是(比如)“10.1.1.1”,那么您当前首先没有发布正确的表单数据。变量的名称不是由编写的文本的一部分

 writer.Write(sData);
您需要执行以下操作:

 string postData = "ipaddress=" + sData;
然后在PHP中使用
ipaddress
form参数

还请注意,您应该给出二进制内容长度,它可能与字符中的字符串长度不同。当然,如果这里的字符串完全是ASCII也没关系,如果它是一个IP地址,我希望是ASCII。。。但对于其他用途,这一点值得牢记。(同样,您通常需要记住任何需要特殊编码的字符。)


还要注意的是,最好为
StreamWriter
HttpResponse
等使用
using
语句,以确保即使抛出异常,也能关闭所有内容。

假设
sData
的值为(比如)“10.1.1.1”那么您当前首先没有发布正确的表单数据。变量的名称不是由编写的文本的一部分

 writer.Write(sData);
您需要执行以下操作:

 string postData = "ipaddress=" + sData;
然后在PHP中使用
ipaddress
form参数

还请注意,您应该给出二进制内容长度,它可能与字符中的字符串长度不同。当然,如果这里的字符串完全是ASCII也没关系,如果它是一个IP地址,我希望是ASCII。。。但对于其他用途,这一点值得牢记。(同样,您通常需要记住任何需要特殊编码的字符。)


还要注意的是,最好对
StreamWriter
HttpResponse
等使用
using
语句,以确保即使抛出异常也能关闭所有内容。

感谢您的回复和优异的评分!你介意回答我如何从PHP页面回复POST请求的问题吗?布雷特:我不懂PHP,但我希望任何好的PHP教程都能处理这个问题。例如,看一看-我建议,为了使开发更容易,您将PHP部分与.NET部分解耦;使用一个简单的HTML表单来测试PHP部分(提供数据)。哦,我没有意识到仅仅使用echo命令就相当于一个响应。@Brett Powell:你认为你的浏览器是如何工作的?在netshell中:它向服务器发送一个HTTP请求(到您指定的URL),然后接收响应(在本例中,是执行的PHP脚本的输出),并从中呈现您看到的页面(在HTML和friends中也是如此)。您可以使用Firefox的Firebug或Opera中的Dragonfly查看请求/响应标题,并且您可以通过右键单击页面->查看源代码来查看原始响应文本。谷歌对于HTTP协议了解更多。感谢您的回复和优秀的分数!你介意回答我如何从PHP页面回复POST请求的问题吗?布雷特:我不懂PHP,但我希望任何好的PHP教程都能处理这个问题。例如,看一看-我建议,为了使开发更容易,您将PHP部分与.NET部分解耦;使用一个简单的HTML表单来测试PHP部分(提供数据)。哦,我没有意识到仅仅使用echo命令就相当于一个响应。@Brett Powell:你认为你的浏览器是如何工作的?在netshell中:它向服务器发送一个HTTP请求(到您指定的URL),然后接收响应(在本例中,是执行的PHP脚本的输出),并从中呈现您看到的页面(在HTML和friends中也是如此)。您可以使用Firefox的Firebug或Opera中的Dragonfly查看请求/响应标题,并且您可以通过右键单击页面->查看源代码来查看原始响应文本。谷歌为HTTP协议了解更多信息。我认为还值得注意的是,针对IP进行身份验证是极其危险的。一个IP可能映射到数千台机器。我认为还值得注意的是,针对IP进行身份验证是极其危险的。一个IP可能映射到数千台机器。