gpt4 book ai didi

php - 没有内容类型的空 $_POST

转载 作者:可可西里 更新时间:2023-10-31 22:14:48 24 4
gpt4 key购买 nike

如果我在请求 header 中未设置内容类型的情况下发出 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 中的变量会神奇地消失

这更像是一个教育问题。我问这个是因为这里的大多数人无法想象内容类型具有这种效果。我被要求“带着事实回来”。所以给你。

最佳答案

如果需要,您可以使用 Apache mod_headers 覆盖/注入(inject)必要的 header 。或者以其他方式求助于手动重建 $_POST 数组。 (另请参阅 userland multipart/form-data handler)

如果它始终是 urlencoded,只需从 php://input(其中包含原始 POST 请求主体)读取并使用 parse_str:

parse_str(file_get_contents("php://input"), $_POST);

这应该会重新创建 POST 数组,就像 PHP 所做的那样。

关于php - 没有内容类型的空 $_POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8213974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com