2016-09-24 82 views
0

我正在尝试在我的php Web应用程序上使用按钮在另一个网站上启动登录的会话。换句话说,我希望我的应用程序:无头登录:使用cURL登录并打开远程会话

  1. 打开一个新标签/窗口(实现)
  2. 转到另一个网站+登录或
  3. (或者)收集所需的目标站点的会话数据考虑当前的浏览器登录

这得以实现(在不完全的方式用下面的代码:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$postdata); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); 
    curl_setopt($ch, CURLOPT_REFERER, $url); 

    $result = curl_exec ($ch); 
    curl_close ($ch); 

    print $result; 

这成功地将远程站点的“登录”页面可视化,但是每当我点击此类远程站点的任何功能时,我都会看到并显而易见404。这是因为我只是通过cURL打印成功登录的输出而我的浏览器不处理目标网站上的远程应用程序。例如。我的地址栏说我在local.dev/loggedin.php中,而不是在secure.targetsite.com/loggein.php。

这可能有帮助:一旦通过浏览器登录后,目标网站会设置一个会话cookie,允许会话在一段时间内存活,这样也可能有用。我的web应用程序是否可以从curl执行的auth过程中获取并存储会话数据并使用它登录?

这也许是不可能被通过卷曲做..

我想的只是解析响应报头的cookie和使用PHP的setcookie(),但它不工作:我得到远程反弹应用程序,如果我从未登录过。

请耐心等待,我不是使用卷曲的专家。

+0

你是对的,这不可能通过cURL。而且你也不能为其他域设置Cookie。 – CBroe

+0

如果你想创建一个无头的登录到另一个网站,你会以哪种方式解决这个问题? – artoo

回答

0

我已经为我自己的一些应用程序完成了这项工作,但它几乎适用于任何可以通过html表单提交登录的东西。您无法使用curl,因为它在您的Web服务器上运行(无论是在本地计算机上还是在云中某处无关紧要),而不是实际上由您的浏览器运行。您的PHP应用程序需要打开一个新的选项卡/窗口,其页面包含一个HTML,其中包含所有必要的字段,方法=“get”或“post”,以及action =“目标登录URL”。然后只需添加一个自动表单提交 - 例如,在页面加载时使用jQuery $('#form_id').submit()