如何将JSON数据作为url字符串发布到外部URL(跨域)并绕过访问控制?
这是一个jquery .ajax发布请求,因为Access-Control-Allow-Origin而无法发送到外部网址:
var json = JSON.stringify(object);
$.ajax({
type: 'POST',
url: externalurl,
data: json,
dataType: 'json',
success: function(data){console.log(data);},
failure: function(errMsg) {
console.log(errMsg);
},
});
我收到了将数据发布到同一域并将“请求传递”到外部域的建议,尽管此解决方案对我没有意义。我正在寻找最安全的解决方案。任何帮助将不胜感激。
答案 0 :(得分:3)
我不久前在PHP中做过这个。这是“传递请求”的示例。 (您需要启用PHP cURL,这对于大多数安装来说都是非常标准的。)
<?php
//Get the JSON data POSTed to the page
$request = file_get_contents('php://input');
//Send the JSON data to the right server
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://location_of_server.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8"));
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$data = curl_exec($ch);
curl_close($ch);
//Send the response back to the Javascript code
echo $data;
?>
答案 1 :(得分:2)
绕过Same-Origin策略的一种方法是使用cURL进行实际传输。
我将举一个使用PHP的示例,但您可以使用任何服务器端语言轻松完成此操作。
在服务器上设置脚本,例如send.php
首先,将ajax指向send.php
var json = JSON.stringify(object);
$.ajax({
type: 'POST',
url: send.php,
data: json,
dataType: 'json',
success: function(data){console.log(data);},
failure: function(errMsg) {
console.log(errMsg);
},
});
然后你的php脚本转发它:
<?php
// Initialize curl
$curl = curl_init();
// Configure curl options
$opts = array(
CURLOPT_URL => $externalscriptaddress,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => 'field1=arg1&field2=arg2'
);
// Set curl options
curl_setopt_array($curl, $opts);
// Get the results
$result = curl_exec($curl);
// Close resource
curl_close($curl);
echo $result;
?>