小编典典

jQuery和Ajax的远程POST请求

ajax

我需要通过Ajax向远程域发出POST请求,我知道Same-Origin Policy的限制,但我读过,有可能在服务器上的PHP中建立网桥以转发请求。

事实是我不知道如何编写此桥,也无法在Google上找到信息。
我想我需要使用CURL。

有人可以解释一下我怎么写吗?


阅读 588

收藏
2020-07-26

共1个答案

小编典典

如果需要代理服务器或“ Bridge ”,则可以尝试以下操作:您可以实现对该PHP脚本的简单AJAX调用,并将该POST重定向到所需的其他服务器。

这个怎么运作:

  1. 创建Proxy.php并粘贴内容。
  2. 使页面最初发送请求以将AJAX请求发送到proxy.php而不是目标服务器。
  3. 该请求将被重定向到目标服务器。
  4. 如果需要结果,可以选择设置选项 CURLOPT_RETURNTRANSFER

请记住首先 放置一些服务器身份验证方法 ,因为在示例中我没有编写 任何 方法 ,否则该页面将是一台不错的 垃圾邮件机器

编辑:我的意思是使用您的服务器向目标服务器提交故障请求。 无论如何,为您的用户添加一些简单的身份验证还不错:)

一些/其中/在/您的/服务器/proxy.php

<?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

2020-07-26