【发布时间】:2011-11-21 15:13:51
【问题描述】:
如果我在请求标头中未设置内容类型的情况下发出 POST 请求,则变量 $_POST 保持为空。
问题:如何强制 PHP 填充 $_POST?
我遇到了使用 XDomainRequest 发出 Javascript AJAX 请求的问题,您无法定义任何标头。只是为了让您更容易理解问题,您可以通过这种方式在 PHP 中模拟没有 Javascript 的相同效果:
$data = 'test=1';
$fp = fsockopen('www.yourpage.org', 80, $errno, $errstr, 5);
fputs($fp, "POST /test_out.php HTTP/1.1\r\n");
fputs($fp, "Host: www.yourpage.org\r\n");
//fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
while(!feof($fp)) { echo fgets($fp, 128); }
fclose($fp);
test_out.php 是
var_dump($_POST);
如果没有正确的内容类型,$_POST 中的变量会神奇地消失。
这更像是一个教育问题。我问这个是因为这里的大多数人都无法想象内容类型具有这种效果。我被要求“带着事实回来”。所以你去吧。
【问题讨论】:
-
它没有什么神奇之处。这就是 PHP 的工作方式(以及任何其他 CGI 解释器)。见php-src/main/rfc1867.c——不知道你的问题是什么。为什么要省略必需的标头?
-
我不想。 XDomainRequest 做到了这一点,并且没有办法解决它,因为您无法添加自定义标头。我用“问题:”标记了问题。
-
太棒了。从事 php rest 服务。突然 $_POST 消失了。是的。没有内容类型。如果我们接受独特的内容类型,我们花了很长时间才弄清楚如何取回 $_POST。非常感谢。
标签: php javascript