PHP脚本说请求方法是GET,它应该是POST

时间:2017-06-29 14:06:26

标签: javascript php html .net c#-4.0

我正在使用C#.NET 4.0为仍在使用XP的客户端构建桌面应用程序。在应用程序中,我必须联系客户的网站,所以我开始研究如何与网站进行简单的沟通。一些敏感信息可能必须通过传输,因此请求方法必须是POST。我已经让应用程序与网站的PHP脚本进行通信,但我不认为它会以POST方式发送,尽管明确地设置了这个方法。

这是我的C#:

byte[] postData = Encoding.UTF8.GetBytes
    ("name=email@address.example&password=P@$$word1234&info=$0m3R4nd0M1nF0#3|23");
IPAddress address = string.Format("https://{0}/formtest.php",
    Dns.GetHostEntry("www.myclientswebsite.com").AddressList[0]);

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(new Uri(address));
request.Method = "POST";
request.Timeout = 10000;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64 rv:54.0) "
    + "Gecko/20100101 Firefox/54.0";
request.Credentials = CredentialCache.DefaultCredentials;

ServicePointManager.SecurityProtocol = (SecurityProtocol) 3072;
ServicePointManager.ServerCertificateValidationCallback = AcceptClientCert;

using(Stream stream = request.GetRequestStream())
{
    stream.Write(postData, 0, postData.Length);
}

string answer = "";
using(WebResponse response = request.GetResponse())
using(Stream stream = response.GetResponseStream())
using(StreamReader reader = new StreamReader(stream))
{
    answer = reader.ReadToEnd().Trim();
}

Console.Writeline(answer);

private void AcceptClientCert(object sender, X509Certificate cert,
                            X509Chain chain, SslPolicyErrors errors)
{
    return cert.GetCertHashString() == "hash string for my client's certificate.";
}

我从PHP脚本获得的回复只是请求方法以及连接是否为HTTPS。响应应该显示为“POST on”,但我尝试的所有内容都会返回“GET on”。不可否认,我对PHP知之甚少,但在过去的几天里我做了相当多的研究,我很确定这个简单的脚本没有错误。不过我可能错了。

这是我的PHP:

<?php
    ob_start();
    echo $_SERVER["REQUEST_METHOD"]." ".$_SERVER["HTTPS"];
    header($_SERVER["SERVER_PROTOCOL"]." 200 Success;");
    header("Status: 200 Success;");
    header("Content-Type: text/plain;");
    header("Connection: close;");
    ob_end_flush();
    ob_flush();
    flush();
?>

我花了一整天的时间试图找出问题出在我的脚本或应用程序中的位置。找不到问题。在我发送请求之后,在发送请求之后,以及脚本的响应本身,我将方法输出到控制台。他们都应该与POST匹配。应用程序始终保持请求方法是POST,但脚本每次都会说GET。所以我决定在网站的页面上创建一个HTML表单,只是为了检查它,我得到了相同的结果。

这是我的HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>
            Title
        </title>
    </head>
    <body>
        <form id="formId" method="POST" target="_self"
          action="https://www.myclientswebsite.com/formtest.php">
            <input type="text" id="name" value="email@address.example"></input>
            <input type="password" id="password" value="P@$$word1234"></input>
            <input type="text" id="info" value="$0m3R4nd0M1nF0#3|23"></input>
        </form>
        <script type="text/javascript">
            document.getElementById('formId').submit();
        </script>
    </body>
</html>

当我在浏览器中导航到该页面时,表单自动提交,并且我从PHP脚本获得响应“GET on”,即使表单明确指出该方法为POST。是否有一些幕后魔术强制请求在JavaScript,C#或PHP中作为GET?我错过了什么?

编辑:我不确定如何,但突然之间,HTML表单开始工作并具有正确的输出。所以现在我认为它可能只是我的C#代码中的东西。

0 个答案:

没有答案