通过AJAX调用PHP脚本执行CURL请求

时间:2017-02-15 17:32:29

标签: php jquery ajax curl

我很难理解为什么当通过AJAX请求调用时,一个已知的工作CURL请求不起作用。

假设我们有一个curl.php文件,它执行一些CURL请求。这些是它的内容:

<?php
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "https://www.somewebsite.com/somescript.cgi");         // set the URL
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); // return the result instead of outputting it
$output = curl_exec($c);
curl_close($c);
?>

我们通过JQuery调用它:

$.ajax({
    url: 'curl.php',
    data: {
        someVariable: "someValue"
    },
    dataType: "json",
    success: function(response){
        //do stuff
    }
});

CURL请求应该在远程服务器上触发某个操作(在这种情况下,它调用cgi脚本,在某些远程数据库中插入记录)。

更新:为了执行远程cgi脚本,必须从远程网站将cookie设置到我的浏览器。(确实如此 - 设置了所述cookie)

如果我单独运行curl.php脚本,其中的CURL请求将完美运行(触发远程操作)。但是,如果我通过AJAX异步调用它,虽然我从它获得的输出与我单独执行curl.php脚本时获得的输出完全相同,但是不会触发远程操作 - 这就是我的意思我以后。

我只能提出两个可能的原因:请求可能被视为跨域请求,因此被拒绝 - 不确定是否可能 - 或者AJAX请求不等待CURL请求完成。如果是这种情况,我不确定是否有办法“强迫”它等待所需的数量。

更新:已经提出了第三个可能的原因 - 如果通过AJAX请求执行curl请求,远程网站会不会显示所述cookie?(这可以解释事实上,虽然curl请求本身似乎也可以通过AJAX调用时正确执行,但尚未触发所需的远程操作)

对任何想法都会感激不尽。

2 个答案:

答案 0 :(得分:1)

打印输出

  echo $output = curl_exec($c);

   $output = curl_exec($c);
   echo json_encode($output);// if array value

答案 1 :(得分:0)

关于强制ajax调用等待,我已成功将ajax操作包装在promise中。这样可以很容易地检测卷曲操作是否成功完成,因为如果承诺没有解决,那么&#34;做东西&#34;操作永远不会执行。在每一步中记录响应的额外好处还有,因此您可以看到curl请求发生了什么。

你还可以将附加的条款链接到承诺上,例如,如果你需要在“做”之前解析响应。&#34;包括错误捕获应该有助于深入了解一切是如何工作的。

JavaScript的:

var promise = new Promise(function(resolve, reject){
    $.ajax({
        url: 'curl.php',
        data: {
            someVariable: "someValue"
        },
        dataType: "json",
        success: function(response){
            //resolve response, instead of do stuff
            console.log(response);
            resolve(response);
        }
    });
});

promise.then(function(response){
    //do stuff
    console.log(response);
    return(response);
});