通过CURL请求加载iFrame内容?

时间:2012-10-31 14:58:52

标签: php iframe curl

这是一个我正在开发的相当复杂的系统,很难解释为什么我必须以这种方式做事,但对我来说是裸露的。

我有一个包含文件(FileX.php)的应用程序,在某些条件下,它会将iFrame回显到加载跟踪URL(FileY.php)的屏幕。在我直接将FileX.php包含到主页面(FileA.php)的生产环境中,iFrame会回显到屏幕并成功调用FileY.php。

在测试中,我需要调用多个版本的FileA.php,每个版本都包含FileX.php,它输出iFrame来调用FileY.php。我正在使用cURL请求自动执行大量请求。

通过cURL请求加载FileA.php时,它成功完成了FileX.php的include(),但因为它是通过cURL发生的,所以iFrame永远不会加载它的目的地(FileY.php)。

fileA的cURL请求如下所示:

TestFile.php

// URL
$url = "http://www.mydomain.com/FileA.php";

// New Cookie file
$ckfile = tempnam("/tmp", "CURLCOOKIE");

// New Connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);  
curl_setopt($ch, CURLOPT_COOKIESESSION, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);

FileA.php:

include_once('FileX.php');

FileX.php:

echo("<iframe src='http://www.mydomain.com/FileY.php' width='0' height='0'></iframe>");

FileY.php

// Contains logging stuff to log the fact that FileY.php was called.

就像我说的,如果我直接在浏览器中调用FileA.php,则会包含FileX.php,并且会成功地在iFrame中加载FileY.php。当我通过cURL调用FileA.php时,iFrame不会加载,永远不会调用FileY.php。

我已尝试用echo()ob_start()包装FileX.php中的ob_end_flush()来强制输出,但这不起作用。我尝试添加sleep(1),以防请求发生得太快,没有运气。

是否有cURL选项我可以更改以允许这种情况发生?我无法弄清楚为什么它不会加载iFrame src。

1 个答案:

答案 0 :(得分:4)

啊,事实证明我错误地使用了一个选项。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

实际应该是假/ 0。当使用true / 1时,所有输出都通过cURL请求捕获并返回,而不是输出。所以它应该是:

curl_setopt($ ch,CURLOPT_RETURNTRANSFER,0);

我会离开这个而不是删除它,以防它帮助其他人。