За последние 24 часа нас посетили 20618 программистов и 1097 роботов. Сейчас ищут 400 программистов ...

php curl NTLM

Тема в разделе "PHP для профи", создана пользователем pdbq, 29 июл 2019.

Метки:
  1. pdbq

    pdbq Активный пользователь

    С нами с:
    22 окт 2010
    Сообщения:
    12
    Симпатии:
    0
    Добрый день уважаемые формучане!
    Возник следующий вопрос:
    1. Имеется локальный портал ServiceDesk. Для него установлен логин и пароль. Логин является логином системы. upload_2019-7-29_15-47-17.png
    2. Авторизация в ServiceDesk происходит автоматически
    3. Поднят локальный сайт на php и необходимо на локальном сайте отображать наряды/задачи сотрудника(уже с настроенным фильтром поиска)
    4. На локальном сайте уже сделана своя автоматическая авторизация upload_2019-7-29_15-55-1.png
    5. Не получается разобраться в том как через curl получить необходимые данные
    К сведению:
    1. Адрес ServiceDesk https://xxx/ по адресу https://xxx/profile - профиль сотрудника. Также как результат выдается заполненный json который собственно и хотется получить
    2. Имеется прокси, но в исключениях ServiceDesk я не нашел. upload_2019-7-29_16-3-48.png
    3. curl у меня работает, т.к. используется в другом проекте

    Код (Text):
    1. $username = 'MukhamadieVA';
    2.     $password = 'password';
    3.     $url="https://xxx/";
    4.     $headers = apache_request_headers();
    5.     //var_dump($headers);
    6.    
    7.    $ch = curl_init();
    8.     //$url = 'http://www.valaam-info.ru/fns/g.php';
    9.     $cookie = dirname(__FILE__) . '/cookies.txt';
    10.     curl_setopt($ch, CURLOPT_URL, $url);
    11.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    12.     //curl_setopt($ch, CURLOPT_PROXY, 'ufa-bc.fc.uralsibbank.ru:8080');
    13.     //Пустой пароль, т.к. юзер будет подтягиваться из ApplicationPool под которым запущен fast-cgi
    14.     curl_setopt($ch, CURLOPT_USERPWD, null);
    15.     curl_setopt($ch, CURLOPT_PROXYUSERPWD, null);
    16.     //Подбери какой параметр нужно тут поставить.
    17.     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    18.     //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
    19.     curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
    20.    
    21.     curl_setopt($ch, CURLOPT_HEADER, true);
    22.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    23.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    24.     curl_setopt($ch, CURLOPT_VERBOSE, 30);
    25.      curl_setopt($ch, CURLOPT_POST, 0);
    26.      //я не скрипт, я - IE
    27.     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1)");    
    28.     echo curl_exec($ch);
    29.     var_dump(curl_getinfo($ch));
    выдает следующее:
    Код (Text):
    1. array(37) { ["url"]=> string(17) "https://xxx/" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(20) ["redirect_count"]=> int(0) ["total_time"]=> float(0.078) ["namelookup_time"]=> float(1.0E-6) ["connect_time"]=> float(0.032) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["redirect_url"]=> string(0) "" ["primary_ip"]=> string(13) "10.10.xxx.xxx" ["certinfo"]=> array(0) { } ["primary_port"]=> int(443) ["local_ip"]=> string(11) "10.1.xxx.xxx" ["local_port"]=> int(56647) ["http_version"]=> int(0) ["protocol"]=> int(2) ["ssl_verifyresult"]=> int(0) ["scheme"]=> string(5) "HTTPS" ["appconnect_time_us"]=> int(0) ["connect_time_us"]=> int(32000) ["namelookup_time_us"]=> int(1) ["pretransfer_time_us"]=> int(0) ["redirect_time_us"]=> int(0) ["starttransfer_time_us"]=> int(0) ["total_time_us"]=> int(78000) }
    Помогите разобраться что необходимо сделать и в какой последовательности. Нужно ли прокси(ведь другой проект к внешнему сайту цепляется без прокси и работает корректно)? Как банально вывести страницу ServiceDesk и с чем связано то что она просто не выводится?
    И самое основное это как авторизоваться в ServiceDesk и получить json?

    Буду крайне признателен за помощь. Всем спасибо.
     

    Вложения:

  2. pdbq

    pdbq Активный пользователь

    С нами с:
    22 окт 2010
    Сообщения:
    12
    Симпатии:
    0
    в консольной версии curl удалось разобраться:
    $ curl -I -k --ntlm -u DOMAIN/login':'password "https://xxx" соединяется и получает HTTP/1.1 200 OK



    login':'password оборачивать двоеточие : в кавычки не нужно