从另一个 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-encoded
或 multipart/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 数据并转发任何响应。感谢您的所有帖子!
我有一个 HTML 页面必须调用另一个域上的 PHP。大多数浏览器的 "Same-Origin-Rule" 禁止该调用。所以我想在我的域上调用一个PHP来在目标域上调用一个PHP。我想避免使用 cURL,所以我决定使用 $context
:
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-encoded
或 multipart/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 数据并转发任何响应。感谢您的所有帖子!