【问题标题】:POST request, not sending anything, isset($_POST) always falsePOST 请求,不发送任何内容,isset($_POST) 始终为 false
【发布时间】:2014-02-21 14:57:25
【问题描述】:

我是 C# 新手。我尝试了其他问题的所有解决方案,但仍然找不到问题所在。我的代码在其他答案中很常见,但它似乎从不发送任何东西。我已经在我自己的服务器和我为服务器工作的公司中尝试过。我知道这种答案以前已经回答过很多次了,但也许我错过了像其他人一样的东西,所以这可能对我以外的人有用。

C#代码:

       var buttonSaveClicked = new MouseEventHandler((o, a) =>
        {
            var user_token = this.textApiKey.Text;

            if (user_token.Length == 0) MessageBox.Show("API Key cannot be empty!", "API Key Error", MessageBoxButtons.OK, MessageBoxIcon.None);

            var httpWebRequest = (HttpWebRequest) WebRequest.Create("http://localhost/networksWindows.php");
            httpWebRequest.ContentType = "application/json; charset=utf-8";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = "{\"user_token\": \"batatas\", \"bata\": \"cook\"}";

                System.Diagnostics.Debug.WriteLine(json);

                streamWriter.Write(json);
                streamWriter.Flush();
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                System.Diagnostics.Debug.WriteLine(result);
                User user = JsonConvert.DeserializeObject<User>(result);

                if (user.status == "error") MessageBox.Show("Invalid API Key. Please make sure you have generated a API key and insert it correctly.", "API Key Error", MessageBoxButtons.OK, MessageBoxIcon.None);
                else if (user.status == "success")
                {
                    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));

                    t.Start();

                    this.Close();
                }
            }

        });

我服务器中的 PHP 脚本:

<?php

$json = null;

if (isset($_POST['user_token']))
{
$json = $_POST['user_token'];

echo "user";
}

?>

【问题讨论】:

  • $_POST 不解析 JSON。

标签: c# php json post


【解决方案1】:

如果您希望$_POST 理解您的数据,则必须以表单编码key=value&amp;key2=value2 发送,而不是JSON。

如果要发布 JSON,则需要在服务器端对其进行解码:

$post = (array)json_decode(file_get_contents("php://input"));
if (isset($post['user_token'])) {
    // ...
}

您可以将file_get_contents("php://input") 替换为$HTTP_RAW_POST_DATA,但其可用性取决于配置。

附: streamWriter.Flush() 调用是多余的。

【讨论】:

  • 这是由于 C# 造成的吗?因为我使用 Java 来发送 JSON 并且有我展示的代码来接收 JSON 发布请求,它工作得很好。
  • 您可能使用了不同的方法在 Java 中发送数据,因为它不依赖于语言。
  • 我明白了 :) 谢谢你的回答。我将尝试找到一种使用 C# 发送表单编码的方法。
【解决方案2】:

您必须在 PHP 中解码您的 json 帖子。 试试这个:

$json = json_decode($_POST);
if (isset($json['user_token']) {
  $userToken = $json['user_token'];
}

【讨论】:

  • 您的代码将不起作用。 1. json_decode 返回 stdClass,而不是 array。 2.$_POST不包含原始帖子数据。
【解决方案3】:

将您的 json 解码为数组:

$json = json_decode($_POST, true);

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2015-04-23
    • 1970-01-01
    • 2013-06-28
    • 2021-07-07
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多