Я пытаюсь зайти на сайт с помощью php curl.
Часть сайтов HTML выглядит так:
<!-- div class="loginbox" -->
<div class="content">
<h1>Login</h1>
<p>Welcome</p>
<div class="loginbox">
<div class="leftpane">
<form action="/idp/profile/SAML2/Redirect/SSO;jsessionid=62CDB993EDA470442EE3DF03580F7EEA?execution=e1s1" method="post">
<h2>Login</h2>
<p>Please log in with username and password</p>
<table>
<tr><td width="40%"><label for="username">Username:</label></td><td><input name="j_username" type="text" id="username" autocapitalize="off" /></td></tr>
<tr><td><label for="password">Password:</label></td><td><input name="j_password" type="password" id="password" /></td></tr>
<tr><td></td><td><button class="form-element form-button" type="submit" name="_eventId_proceed">Login</button></td></tr>
</table>
Мой текущий PHP-скрипт выглядит так:
<?php
//based on: http://thisinterestsme.com/php-login-to-website-with-curl/
define('USERNAME', 'myUserName');
define('PASSWORD', 'myPassword');
define('USER_AGENT', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36');
define('COOKIE_FILE', 'cookie.txt');
define('START_URL', 'https://url-before-redirect');
$postValues = array(
'j_username' => USERNAME,
'j_password' => PASSWORD
);
//Initiate cURL.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, START_URL);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Must be set to true so that PHP follows any "Location:" header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($ch, CURLOPT_USERAGENT, USER_AGENT);
$a = curl_exec($ch); // $a will contain all headers
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // last effective URL
//URL of the login form.
define('LOGIN_FORM_URL', $url);
//action-URL of the buttons
define('LOGIN_ACTION_URL', $url);
curl_setopt($ch, CURLOPT_URL, LOGIN_ACTION_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postValues));
curl_setopt($ch, CURLOPT_REFERER, LOGIN_FORM_URL);
//Execute the login request.
curl_exec($ch);
//Check for errors!
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
//We should be logged in by now. Let's attempt to access a password protected page
curl_setopt($ch, CURLOPT_URL, 'https://some.page.com');
//Execute the GET request and print out the result.
echo curl_exec($ch);
?>
После выполнения этого скрипта, curl снова появляется на экране входа в систему.
Я попытался проследить процесс входа в систему с помощью инструментов разработчика (F12), предоставляемых Firefox. Вот что находится в теле POST-запроса:
RelayState = печенье% 3A1540823493_27cc&
SAMLResponse = PD94bWwgdmVyc2lvbj0iM …
Что я ожидал, так это:
j_username = MyUserName
j_password = MyPassword
Кто-нибудь может дать мне несколько советов о том, как я должен подойти к этой проблеме?
Задача ещё не решена.
Других решений пока нет …