PHP中的$ _POST变量为空

时间:2011-07-04 04:02:32

标签: php http httpwebrequest

我在这里看到一些有同样问题的帖子,但没有一个像我一样简单,因此也是帖子。

我是php新手,我发现$_POST$_REQUEST变量都是空的。我可以使用apache_request_headers()获取标题,并且能够正确查看标题。只是$_POST变量是空的。

我的客户端是Android应用,正在正确生成帖子消息。我用tcpdump来测试它。此外,apache日志显示调用了预期的PHP。我使用Apache 2.2.14和PHP 5.2.12标准安装,没什么特别的。

有人能想出$_POST变量为空的原因吗?

此外,我在代码中没有使用类。它只是简单的代码,根据需要调用其他类的函数。我之所以提到这一点,是因为我看到了另一篇建议使用$this->input->post()的帖子,但在我的情况下这是不可能的。

编辑:感谢下面的肖恩找到了问题。 “Content-Type”未正确设置,导致实际值未达到php代码。奇怪的是,空请求的标头是我设置它们的。为什么要剥离数据?

2 个答案:

答案 0 :(得分:3)

确保您的Android客户端在POST上发送正确的内容类型。它应设置为 application / x-www-form-urlencoded

        url = new URL("your URL");
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestMethod("POST");

答案 1 :(得分:1)

首先,我会检查您的服务器是否未使用301'永久移动'代码重定向POST数据。打开你的日志文件来检查这个。如果它运行良好,你应该看到200代码(或最坏的201)。您会注意到,对于每次调用服务器,都会生成POST和GET代码。确保两者都是200.如果只有GET是200但POST是301,那么您的服务器由于某种原因而重定向(例如,您正在调用http://mysite.com,但服务器重定向到http://www.mysite.com)。

如果你需要在没有返回值的情况下测试GET,那么在android中使用HttpPost尝试类似这样的东西:

HttpPost httppost = new HttpPost("http://www.mysite.com?somevarname=somevalue");
httpclient.execute(httppost);

然后从服务器端尝试执行类似创建文件的操作,或者如果存在GET变量的话。

但是如果您的日志有GET和POST的重定向代码,那么您需要使用.htaccess覆盖重定向或将主机配置为停止任何重定向。

祝你好运!