cURL绕过同一原产地政策

时间:2014-02-17 17:48:29

标签: javascript php curl

所以我正在为cURL编写脚本,脚本以各种方式模拟我的浏览器。但我仍然得到一个会话无效的错误。我正在浏览chrome控制台并看到两个错误

" SecurityError:阻止了一个包含起源的框架" http://localhost"从访问带有起源的框架" http://edugen.wileyplus.com"。协议,域和端口必须匹配"

" Uncaught SecurityError:阻止了一个包含起源的框架" http://edugen.wileyplus.com"从访问带有起源的框架" http://localhost"。协议,域和端口必须匹配"

我查了一下这个错误,我得到了一些关于如何处理chrome不再允许框架或其他东西的信息,但我怀疑它是因为控制台引用了这两行代码。

var win = self;
    while ( typeof(win.isLTIRoot) == 'undefined' && win.parent != null && win.parent != self && win.parent != win )

和这一个

function setSTNOnLoadListener(wnd) {
    setSTNFrameOnLoadListener(wnd, wnd.document.getElementsByTagName('frame'));
    setSTNFrameOnLoadListener(wnd, wnd.document.getElementsByTagName('iframe'));
}

那么我应该对cURL使用什么策略以及问题到底是什么。

编辑:更多细节和卷曲代码

所以我想登录一个网站并进入大型机。整个过程很繁琐,因为我必须遵循9个位置标题,一切顺利,但当我最终到达网页时,我收到错误"您的会话无效"。

这是大型机最后一页的卷曲代码。

$ch = curl_init();

// Set some options - we are passing in a useragent too here
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => FALSE,  // Setting cURL to follow 'location' HTTP headers
    CURLOPT_URL => $url9,
    CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0",
    CURLOPT_STDERR => $verbose = fopen('php://temp', 'rw+'),
    CURLOPT_VERBOSE => TRUE,
    CURLOPT_HTTPHEADER => array(
                                'Host: edugen.wileyplus.com',
                                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                'Accept-Language: en-US,en;q=0.5'
                            ),
    CURLOPT_CAINFO => dirname(__FILE__)."\cacert.pem",
    CURLOPT_HEADER => TRUE,
    CURLOPT_COOKIEJAR => $ckfile,
    CURLOPT_COOKIEFILE => $ckfile
));
 if( ! $tenth_page = curl_exec($ch)) 
            { 
                trigger_error(curl_error($ch)); 
            } 
$urlEndpoint = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo "Verbose information:\n<pre>", !rewind($verbose), htmlspecialchars(stream_get_contents($verbose)), "</pre>\n";

curl_close($ch);

$tenth_page = str_replace("src=\"","src=\"http://edugen.wileyplus.com",$tenth_page);

echo $tenth_page;

1 个答案:

答案 0 :(得分:0)

我希望他们已经部署了一些安全措施,以防止他们的页面在来自不同域的iFrame中加载。

开发时的另一个常见错误是当您的开发站点被引用为localhost时 - 如果您正在进行ajax调用,那么您应该确保将您的开发站点别名为与您呼叫的站点相同的域,如果它们有任何交叉原产地安全集。