我需要通过 Ajax 向远程域发出 POST 请求,我知道存在同源策略的限制,但我读过可以在我的服务器上的 PHP 中建立一个桥梁来转发请求。
事实是我不知道如何写这个桥,我在谷歌上找不到信息。
我想我需要使用 CURL。
有人能解释一下怎么写吗?
如果您需要代理或“桥”,您可以尝试如下: 您可以实现对该 PHP 脚本的简单 AJAX 调用,并将该 POST 重定向到您想要的另一台服务器。
这个怎么运作:
请记住首先放置一些服务器身份验证方法,因为我在示例中没有写任何内容,否则该页面将成为一个不错的垃圾邮件机器
编辑:我的意思是使用您的服务器向目标服务器提交故障请求。无论如何,为您的用户添加一些简单的身份验证并不是那么糟糕:)
<?php
/* You might want some authentication here */
/* check authentication */
/* Authentication ended. */
$url = 'http://target.com/api'; //Edit your target here
foreach($_GET as $getname => $getvar) {
$fields[$getname] = urlencode($getvar); //for proxying get request to POST.
}
foreach($_POST as $postname => $postvar) {
$fields[$postname ] = urlencode($postvar); //for proxying POST requests.
}
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
我假设您已经知道发送 POST ajax 请求的方式。如果您不是,请尝试阅读 http://www.openjs.com/scripts/jx/jx.php
根据您的 PHP 配置和请求的复杂性,您很可能只使用file_get_contents函数即可。例如:
<?php
if (!isset($_GET["id"])) {
die("No ID passed");
}
$theID = (int)$_GET["id"];
echo file_get_contents("http://example.com/getSomeData?id={$theID}");
如果你把它放在你域上的一个 PHP 文件中,你可以使用 AJAX 来请求这个文件,而不受相同域策略的限制,它会返回你在函数调用中指定的任何远程页面的内容。
请注意,此file_get_contents
函数的使用需要启用allow_url_fopen指令。否则,您将不得不使用像 Curl 这样的库来执行来自 PHP 的请求。
如果您控制要发布到的服务器,则可以以允许发布的方式设置策略。看到这个答案。
如果您不控制服务器,则必须设置一个代理,您可以用 PHP 编写该代理。它真正做的只是在你的 JavaScript 和目标服务器之间传递信息。