无头登录:登录和打开远程会话与cURL


Headless Login: login and open remote session with cURL

我正试图在我的php web应用程序上使用一个按钮来启动另一个网站上的登录会话。换句话说,我希望我的应用程序:

  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执行的验证过程中获取和存储会话数据并使用它登录吗?

这可能无法通过cURL完成…

我想只是解析cookie的响应头并使用php setcookie(),但它不起作用:我被远程应用程序反弹,好像我从未登录过。

请耐心点,我不是使用curl的专家。

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