如何发出PHP CORS请求?

如何发出PHP CORS请求?,php,curl,cors,Php,Curl,Cors,我正在尝试使用PHP Curl向我们的API站点发出请求。目前,我正试图提出一个简单的要求 API站点有一个返回JSON格式数据的目录。脚本如下所示:\ <?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('A

我正在尝试使用PHP Curl向我们的API站点发出请求。目前,我正试图提出一个简单的要求

API站点有一个返回JSON格式数据的目录。脚本如下所示:\

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

$arr['id'] = '001';
$arr['desc'] = 'Simple JSON output';

$json = json_encode($arr);

echo $json;
?>

如果我从浏览器访问API站点(API/test_json),我会看到json数据:

我在另一个域上有一个PHP脚本,试图获取JSON数据:

<?php
$url = "http://ourapi.com/test_json/";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$str = curl_exec($curl);
curl_close($curl);

var_dump($str);
?>


但当我跑的时候,我得到了一个bool(false)的返回。我的代码有遗漏吗?

服务器端调用不受跨源请求策略的约束。问题在于API的可用性。是否需要任何身份验证?当您从浏览器请求它时,您可能有一个会话cookie


简化您的代码,只需
文件\u获取\u内容(“http://ourapi.com/test_json/");启用所有错误显示,查看是否有错误。

当url不使用ssl时,为什么要设置ssl选项?顺便说一句,如果你从php调用api,你不需要CORS头,如果你想直接从javascript调用api,你只需要这个。我可以删除SSL。不幸的是,JavaScript不是一个选项。我明白了,问题是我调用API的Web主机不允许调用file_get_contents()。希望我仍然可以发出服务器端CORS请求。如果带有URL的文件\u get\u contents()受到限制,那么CURL是否也被禁用?您是否在Google AppEngine之类的设备上运行此代码?某些web主机限制使用文件\u get\u contents(),但允许使用CURL。代码正在我们的web主机上运行