从另一个 PHP 调用一个 PHP (没有 cURL)

Call a PHP from another PHP (without cURL)

我有一个 HTML 页面必须调用另一个域上的 PHP。大多数浏览器的 "Same-Origin-Rule" 禁止该调用。所以我想在我的域上调用一个PHP来在目标域上调用一个PHP。我想避免使用 cURL,所以我决定使用 $context:

在传递 PHP 中使用 fopen
$params = array('http' => array('method'=>'POST',
                                'header'=>'Content-type: application/json',
                                'content'=>json_encode($_POST)));
$ctx = stream_context_create($params);
$fp = fopen('https://other_domain.com/test.php', 'rb', false, $ctx);
$response = stream_get_contents($fp);
echo $response;

但是test.php中传入的$_POST好像是空的。有任何想法吗?

尝试使用 http_build_query()

构建参数
$postdata = http_build_query(
    array(
        'json' => json_encode($_POST),
    )
);

然后

$params = array('http' => array('method'=>'POST',
                            'header'=>'Content-type: application/x-www-form-urlencoded',
                            'content'=> $postdata));

在其他站点上通过 $_POST['json']

获取

除非您的服务器支持 application/json 作为 POST 内容类型,否则您的代码将无法工作:HTTP 服务器期望 POST 数据始终是其中之一application/x-www-form-encodedmultipart/form-data。您需要重写您的代码才能以一种受支持的类型发送 POST 数据。

我是这样管理的:

$postData = file_get_contents('php://input');
$params = array('http' => array('method'=>'POST',
                                'header'=>'Content-type: application/x-www-form-urlencoded',
                                'content'=>$postData));
$ctx = stream_context_create($params);
$url = 'https://other_domain.com/test.php';
$fp = fopen($url, 'rb', false, $ctx);
$response = stream_get_contents($fp);
echo $response;

这很容易传递所有传入的 POST 数据并转发任何响应。感谢您的所有帖子!