我需要向Ajax做一个远程域的POST请求,我知道同源策略有限制,但我读过可以在我的服务器上用PHP桥接来转发请求
事实是,我不知道如何编写这座桥,我无法在Google上找到相关信息 我想我需要使用CURL。
有人可以解释我怎么写一个吗?
答案 0 :(得分:4)
如果您需要代理或“ Bridge ”,可以尝试以下操作: 您可以实现对该PHP脚本的简单AJAX调用,并将该POST重定向到您需要的其他服务器。
工作原理:
请记住首先放置一些服务器身份验证方法,因为我在示例中写了 none ,或者该页面将是一个不错的垃圾邮件计算机
编辑:我的意思是使用您的服务器向目标服务器提交故障请求。无论如何,为用户添加一些简单的身份验证并不是那么糟糕:)
<?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
答案 1 :(得分:0)
根据您的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来请求此文件,而不受相同域策略的限制,并且它将返回您在函数调用中指定的任何远程页面的内容。 / p>
请注意,file_get_contents
函数的使用要求启用allow_url_fopen指令。否则,您将不得不使用像Curl这样的库来执行PHP的请求。
答案 2 :(得分:0)
如果您控制要发布到的服务器,则可以以允许POSTing的方式设置策略。请参阅this answer。
如果您不控制服务器,则必须设置代理,您可以使用PHP编写代理。它真正做的就是在JavaScript和目标服务器之间传递信息。