gpt4 book ai didi

带有 cURL 的 PHP NTLM session

转载 作者:可可西里 更新时间:2023-10-31 23:32:24 28 4
gpt4 key购买 nike

所以首先要了解一些琐事..

有写在ASP.NET网站上,它使用NTLM协议(protocol)来验证想要登录的用户。他们正常使用时完全可以,他们输入网站URL,他们提供他们的凭据,验证并维护 session 网页浏览器。

我想做的是创建将充当机器人的 PHP 网站。这是我公司的内部网站,我已获准这样做。我遇到的问题是管理 session 。用户将能够在我的 PHP 网站中输入他们的凭据,我的 PHP 网站将使用 cURL 对他们进行身份验证以访问目标站点。

到目前为止我得到的代码是:

    $cookie_file_path = dirname(__FILE__) . '/cookies.txt';
$ch = curl_init();

//==============================================================
curl_setopt($ch, CURLOPT_USERPWD, $username. ':' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, 100);
//=============================================================
$ret = curl_exec($ch);

以上代码通过 cURL(看起来管理 NTLM 握手)登录到目标网站,并获取网站内容。它还存储在 cookie 文件中发回的 session ID。

接下来我要做的是注释 CURLOPT_USERPWD 选项,希望此脚本将使用存储在 cookie 文件中的 session ID 在第二次执行此脚本时验证先前登录的用户.它可以摆脱用户凭据并且不会以这种方式将其存储在任何地方,因为将其存储在手动创建的 session 、数据库或其他任何地方都不安全。

我需要这个机器人,因为它会使用 CRON 定期检查网站状态是否已更改,并执行一些用户操作作为对此的 react 。但是要做到这一点,首先必须对用户进行身份验证,并且他的用户名和密码不能存储在任何地方,所以我必须使用他最初登录时建立的 session 信息。

CURL 似乎不执行此操作。当我第二次使用注释的 CURLOPT_USERPWD 选项执行脚本时,它不使用存储的 cookie 来保持 beeing 身份验证。相反,它REWRITES 从服务发送给我的不相关数据的 cookie 文件作为对NOT AUTHRORISED 访问请求的响应。

我的问题是:为什么 cURL 不使用存储的 session 信息来保持 bee 身份验证?有没有什么方法可以使用基于 cURL 和 NTLM 协议(protocol)的网站来维持这个 session ?

提前致谢。

最佳答案

几个月前,我遇到了与您类似的问题。我试图连接到 navision soap api。 Navision 使用 ntlm 身份验证。问题是 curl 本身不支持 ntlm,所以你必须自己做。

在这种情况下,一篇博文对我帮助很大:

http://rabaix.net/en/articles/2008/03/13/using-soap-php-with-ntlm-authentication

** 编辑

对不起,我误解了你的问题。你的问题很简单。

只需从带有此行的请求中接收 header

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

然后您可以从 curl_exec 函数的结果中获取 Set-Cookie header 。

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $ret, $match);
$cookie = parse_url($match[0]);

现在您可以将它存储在某处,并在 2ten 请求中使用它。

关于带有 cURL 的 PHP NTLM session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110507/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com