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

时间:2013-09-14 09:37:16

标签: php jquery ajax post

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

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

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

3 个答案:

答案 0 :(得分:4)

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

工作原理:

  1. 创建Proxy.php并粘贴内容。
  2. 使页面最初发送请求以向proxy.php而不是目标服务器发送AJAX请求。
  3. 请求将被重定向到目标服务器。
  4. 如果您想要结果,可以选择设置选项 CURLOPT_RETURNTRANSFER
  5. 请记住首先放置一些服务器身份验证方法,因为我在示例中写了 none ,或者该页面将是一个不错的垃圾邮件计算机

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

    一些/其中/中/你的/服务器/ 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

答案 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和目标服务器之间传递信息。

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