2013-11-16 7 views
1

Я пытаюсь получить содержимое страницы SSL ASPX с помощью Curl, вот мой код:PHP Curl Basic авторизации в SSL

$ourFileName = "cookieFIle.txt"; 
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file"); 
fclose($ourFileHandle); 

function curl_get($url) { 
    $ch = curl_init(); 
    $options = array(
     CURLOPT_HEADER => 1, 
     CURLOPT_URL => $url, 
     CURLOPT_USERPWD => 'XXX:XXX', 
     CURLOPT_SSL_VERIFYPEER => false, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_HTTPAUTH => CURLAUTH_ANY, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13', 
     CURLOPT_HTTPHEADER => $header, 
     CURLOPT_COOKIESESSION, true, 
     CURLOPT_COOKIEFILE, "cookieFIle.txt", 
     CURLOPT_COOKIEJAR, "cookieFIle.txt" 
    ); 
    curl_setopt_array($ch, $options); 
    $return = curl_exec($ch); 
    curl_close($ch); 

    return $return; 
} 


echo curl_get('https://somepage.com/intranet/loginprocess.aspx'); 

И всякий раз, когда я выполняю код я получаю это:

Заголовок :

HTTP/1.1 401 Unauthorized 
Content-Length: 1656 
Content-Type: text/html 
Server: Microsoft-IIS/6.0 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 
MicrosoftOfficeWebServer: 5.0_Pub 
X-Powered-By: ASP.NET 
X-UA-Compatible: IE=EmulateIE8 
Date: Sat, 16 Nov 2013 19:05:18 GMT 

Сообщение:

You are not authorized to view this page 
You do not have permission to view this directory or page using the credentials that you supplied because your Web browser is sending a WWW-Authenticate header field that the Web server is not configured to accept. 

Логин и пароль на 100% правильные, и URL-адрес тоже. OpenSSL установлен на RaspverryPI, который я использую, и cURL включен в php.ini

. Loginprocess.aspx перенаправляет вас на studenthome.aspx после завершения авторизации, но я думаю, что проблема заключается в самой авторизации.

ответ

3

Вы пытаетесь подключиться к базовой аутентификации, а сервер запрашивает интегрированную проверку подлинности Windows (NTLM).

Используйте опцию CURLAUTH_NTLM.

Вы не должны устанавливать печенье в true. Из руководства:

ИСТИНА, чтобы отметить это как новый сеанс cookie. Это заставит libcurl игнорировать все куки, которые он собирается загрузить, которые являются «сеансовыми куки» из предыдущего сеанса. По умолчанию libcurl всегда хранит и загружает все файлы cookie, независимо от того, являются ли они сеансовыми файлами или нет. Файлы cookie сеанса - это файлы cookie без истечения срока действия, и они предназначены для того, чтобы быть живыми и существующими только для этой «сессии».

Ваш код также имеет опечатки. Он должен выглядеть следующим образом:

CURLOPT_HTTPHEADER => $header, 
    CURLOPT_COOKIEFILE => "cookieFIle.txt", 
    CURLOPT_COOKIEJAR => "cookieFIle.txt" 
); 
+0

Спасибо, сменив curl_httpauth на ntlm. Теперь я получаю сообщения «с истекшим сроком действия» с самого сайта, можете ли вы предложить причину, и если это проблема с кукисами, как я могу ее решить? –

+0

Я выполнил свой ответ. Роботы, использующие аутентификацию, могут стать довольно сложными;) –

Смежные вопросы