首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接到使用Office365登录的网站

连接到使用Office365登录的网站
EN

Stack Overflow用户
提问于 2016-11-04 16:22:15
回答 1查看 1.2K关注 0票数 1

我需要帮助在使用Office365单点登录(单点登录)的网站上使用PHP-CURL登录。

在过去,在PHP中使用curl来使用用户名和密码登录是没有问题的:

代码语言:javascript
复制
<?php
$URL = "https://intra.epitech.eu/"


// if (!isset($argv[1]))
  // die("Please specify the event URL");

$url_event = rtrim("https://intra.epitech.eu/module/2016/B-PAV-450/PAR-5-1/registered", "/");

$ch = curl_init();
$opts_base = array( CURLOPT_URL => $URL.'login',
                    CURLOPT_SSL_VERIFYPEER => FALSE,
                    CURLOPT_VERBOSE=> FALSE,
                    CURLOPT_COOKIEJAR => "cookie.txt",
                    CURLOPT_COOKIEFILE => "cookie.txt",
                    CURLOPT_RETURNTRANSFER => TRUE,
                    CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'Connection: Keep-Alive')
                    );
curl_setopt_array($ch, $opts_base);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"login":"firstname.name@epitech.eu","password":"PASSWORD123"}');
$html = curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, FALSE);
curl_setopt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url_event);
$html = curl_exec($ch);

var_dump($html);
// Some code...
?>

但是最近一个Udate删除了帐户登录系统,现在它使用了Office365 SSO身份验证"Connect“:uri=https%3A%2F%2Fintra.epitech.eu%2Fauth%2Foffice365&state=%2F

因此,我的问题是:我如何连接到网站使用卷发提出这样的要求?

我必须创建一个网站,使用Office连接登录,然后使用用户的信息登录到我的学校内部网,使用SSO获得一些信息,比如用户的等级“管理,学生等等”,并发出一些cURL帖子请求来推送一些数据。

我完全不知道如何使用Office身份验证连接到intranet :/

如果auth操作正确,我应该有如下的json数据:

代码语言:javascript
复制
[
    {
        "login": "user2.lastname@epitech.eu",
        "picture": "https:\/\/cdn.local.epitech.eu\/userprofil\/blabla.jpg",
        "title": "Firstname Lastname",
        "location": "FR\/PAR",
        "promo": 2019,
        "course_code": "bachelor\/classic",
        "grade": "-",
        "cycle": "bachelor",
        "date_ins": "2016-09-13 21:49:05",
        "credits": 6,
        "flags": [],
        "semester": "B5"
    },
    {
        "login": "otherguy.lastname",
        "picture": "https:\/\/cdn.local.epitech.eu\/userprofil\/blabla.bmp",
        "title": "Firstname LastName",
        "location": "FR\/PAR",
        "promo": 2019,
        "course_code": "bachelor\/classic",
        "grade": "-",
        "cycle": "bachelor",
        "date_ins": "2016-09-14 01:39:36",
        "credits": 6,
        "flags": [],
        "semester": "B5"
    },
    {
      ...
    }
  ]

但我不能登录..。所以很难继续我的项目..。

我真的希望你能帮我这个忙。如果需要的话,请随时询问你想要的任何信息,因为英语不是我的母语。

提前谢谢,致以最良好的问候。扬尼克。

EN

回答 1

Stack Overflow用户

发布于 2016-11-07 17:03:27

我没有使用Office流程的经验,但是(根据您的意见),您的问题可能是使用相同的cURL句柄来处理两个不同的请求。以下是一些建议。

尝试为每个请求创建一个句柄。

代码语言:javascript
复制
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL , $URL.'login');
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER , FALSE);
curl_setopt($ch1, CURLOPT_COOKIEJAR , "cookie.txt"); it will save your cookies in the cookie.txt file after curl_close()
curl_setopt($ch1, CURLOPT_RETURNTRANSFER , TRUE);
curl_setopt($ch1, CURLOPT_HTTPHEADER , array('Content-Type: application/json', 'Connection: Keep-Alive'));
curl_setopt($ch2, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"login":"firstname.name@epitech.eu","password":"PASSWORD123"}');
$html = curl_exec($ch1);
curl_close($ch1);

请注意,我更喜欢curl_setopt而不是curl_setopt_array,但这只是个人偏好,不应该影响您的脚本。

除非您已经有了文件cookie.txt,否则行curl_setopt($ch1, CURLOPT_COOKIEFILE , "cookie.txt");是不必要的。该文件将在curl_close之后创建,因为您使用的是CURLOPT_COOKIEJAR。请参阅PHP手册中这些选项的修改。

CURLOPT_COOKIEJAR:将所有内部cookie保存到句柄关闭时的文件名,例如在调用curl_close之后。

此外,这也是调试代码的完美步骤。试着打印出$html,看看它的内容,也许它会给威尔一些提示。您还可以使用选项CURLOPT_VERBOSETRUE,并更精确地分析您的请求。

确保答案正确后,为第二个请求创建第二个句柄。

代码语言:javascript
复制
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_POSTFIELDS, FALSE);
curl_setopt($ch2, CURLOPT_POST, FALSE);
curl_setopt($ch2, CURLOPT_URL, $url_event);
curl_setopt($ch2, CURLOPT_COOKIEFILE , "cookie.txt");
$html2 = curl_exec($ch2);
curl_close($ch2);

var_dump($html2);

我认为这里是curl_setopt($ch2, CURLOPT_COOKIEFILE , "cookie.txt");的正确位置,因为现在文件已经存在了。文件又一次:

CURLOPT_COOKIEFILE:包含cookie数据的文件的名称。cookie文件可以是Netscape格式的,也可以是简单的HTTP样式的标头,转储到文件中。如果名称是空字符串,则不会加载cookie,但仍然启用cookie处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40427431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档