使用jQuery和Ajax进行远程POST请求

我需要对一个远程域做一个POST请求,但我知道存在同源策略的限制,但我已经读过,可以在我的服务器上用PHP桥接来转发请求。

事实上,我不知道如何写这个桥,我无法在谷歌上找到信息。
我想我需要使用CURL。

谁能解释我怎么写一个?

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

这个怎么运作:

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

请记住首先放置一些服务器身份validation方法 ,因为我在示例中没有编写任何一个 ,或者该页面将是一个很好的垃圾邮件机器

编辑:我的意思是使用您的服务器向目标服务器提交故障请求。 无论如何,为用户添加一些简单的身份validation并没有那么糟糕:)

一些/哪里/在/您/服务器/ proxy.php

 $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文件中,则可以使用AJAX来请求此文件,而不受相同域策略的限制,并且它将返回您在函数调用中指定的任何远程页面的内容。

请注意,使用file_get_contents函数需要启用allow_url_fopen指令。 否则,您将不得不使用像Curl这样的库来执行PHP的请求。

如果您控制要发布到的服务器,则可以以允许POSTing的方式设置策略。 看到这个答案 。

如果您不控制服务器,则必须设置代理,您可以使用PHP编写代理。 它真正做的就是在JavaScript和目标服务器之间传递信息。

  1. 在您的网站上创建一个端点,例如/proxy
  2. 像往常一样提出请求,但不是指向原始url,而是将其指向/proxy/
  3. 在处理/proxy端点的文件中,您只需提取HTTP方法,URL标头,参数,正文等,并向目标服务器发出完全相同的请求。 您可以使用cURL或像Guzzle这样的包来执行此操作。 还有一些软件包可以为您提供此代理function,但我不熟悉它们的质量。