$username = 'myname';
$password = 'mypass';
$loginUrl = 'https://example.com/login/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'user='.$username.'&pass='.$password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
echo $content;
После входа в систему я вижу логин вместо защищенного содержимого. Что пошло не так в моем случае?
Либо страница входа в систему ожидает чего-то другого, кроме переменных пользователя и прохода (например, он может проверять агент пользователя или больше переменных), или данные неправильно закодированы, вы можете использовать следующий код для правильного кодирования строк:
$data = array(
'user' => $username,
'pass' => $password
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
Чтобы проверить, какие переменные они ожидают, вы должны использовать какой-то сетевой сниффер, например, в Chrome Developer Tools, вы можете открыть вкладку "Сеть" и проверить, какая форма входа в систему данных отправляется.
Или вы можете опубликовать этот URL здесь, и я проверю это для вас. Вы можете отправить мне письмо на mstrokin на gmail.com, если вы не хотите публиковать его здесь.
$username
и$password
должны быть закодированы в URL перед их отправкой. Если они содержат не-URL-безопасные символы, это будет иметь значение. Но я хотел бы проверить свой код на стороне сервера: действительно ли он имеет форму сuser
иpass
поля (или , возможно ,username
иpassword
).