是否可以登录一个站点,然后在该用户下从该站点读取信息 - 用PHP?

时间:2011-07-15 20:31:04

标签: php session authentication curl

问题: 是否可以登录站点然后从该用户下的站点读取信息(在PHP中)?

例如: 许多网站都是动态的,并且从数据库中获取PHP绘图信息让我们说example.com登录了。

在显示的页面example.com/test.php中显示:“你好用户”,当没有登录时会显示:“你不是用户在这里登录”

让我们说认证过程是通过会话,用户将通过发布带有“user”和“pass”标签的表单进行登录,如果正确的话会启动会话,允许用户在example.com上查看消息。 /test.php

问题: 是否可以登录网站,然后从该用户下的网站上读取信息?

我一直在环顾四周,不知道如何处理这个问题。什么都有帮助。提前谢谢。

4 个答案:

答案 0 :(得分:1)

当然,您可以使用file_get_contents + streams和/或curl来获取PHP中的数据。有些库允许你在php中执行javascript,所以甚至可以处理动态页面。

问题是,无论你想要做什么都值得在PHP中基本构建浏览器的所有工作。

答案 1 :(得分:0)

PHP can do this但不是为此而设计的。

PHP语法基于Perl,可能更适合。你也可以试试Python。

答案 2 :(得分:0)

你可以(卷曲)

        $ckfile = tempnam ("/tmp", "CURLCOOKIE");
        $ch = curl_init("http://example.com/index.php");
        curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec ($ch);
        curl_close($ch);


        $ch = curl_init();
        $fields = array(
                'username' => 'genesis',
                'pass' => 'pass',
                'other' => 'post fields'
        );
        foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
        curl_setopt($ch, CURLOPT_URL, "http://example.com/login.php");
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        $result = curl_exec($ch);
        curl_close($ch);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://example.com/logged_page.php");
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        $needed_information = curl_exec($ch);
        curl_close($ch);

答案 3 :(得分:0)

如果domain A,B,其中A!= B,则由于same origin policy(轻松),您无法执行此操作。你可以进入SSO。有一些库可用,我还没有尝试过例如=> http://www.jasny.net/articles/simple-single-sign-on-for-php/