Раздел вопрос-ответ curl авторизация на сайте onliner.by

Отправляю запрос на 'https://profile.onliner.by/login' методом POST с передачей POST данных, но онлайнер отдаёт снова страницу авторизации без каких-либо ошибок.

share
 
торг уместен....
– anonymous 9 лет назад

1 ответ

До ввода авторизации через соц. сети на onliner.by (введено 14 октября 2014) процесс авторизации заключался в отправке одного POST-запроса с username и password на url https://profile.onliner.by/login и получении в ответ заголовка set-cookie "onl_session".

Далее по куке "onl_session" можно имитировать залогиненность юзера на 14 дней, по истечению которых кука "протухала".

У меня успешно работал следующий php-код для авторизации на онлайнере с использованием curl:

<?php

class Onliner_Auth_Parser extends Parser_AbstractHttp
{
	const URL_TEMPLATE = 'https://profile.onliner.by/login';

	public function auth(array $onlUser)
	{
		$request = $this->getExpectedRequest($onlUser['onl_username'], $onlUser['onl_password']);

		$response = $this->getClient()
			->setFollowLocation(false)
			->setFollowMetaRedirect(false)
			->send($request);

		return $this->runResponse($response);
	}

	public function getExpectedRequest($username, $password)
	{
		$request = new Http_ClientRequest();

		$headers = array_merge(Http_Browser::getNextRequestHeaders(), array(
			'Cache-Control' => 'max-age=0',
			'Content-Type' => 'application/x-www-form-urlencoded',
			'Connection' => 'keep-alive',
			'Referer' => 'https://profile.onliner.by/login',
		));

		$request
			->setMethod('POST')
			->setPostVar('username', $username)
			->setPostVar('password', $password)
			->setPostVar('x', '0') // что такое x и y - не понятно, с нулём ок.
			->setPostVar('y', '0')
			->setPostVar('autologin', 'on')
			->setHeaders($headers)
			->setUrl($this->getUrl());

		return $request;
	}

	public function runResponse(Http_BaseResponse $response)
	{
		$cookies = $response->getCookies();

		if (!isset($cookies['onl_session'])) {
			throw new Parser_Exception_ResponseFailed('Onliner auth failed');
		}

		$onlSessionCookie = $cookies['onl_session']->getValue();

		if (!$onlSessionCookie) {
			throw new Parser_Exception_ResponseFailed('Strange: got empty cookie string');
		}

		return array(
			'onl_session' => $onlSessionCookie,
		);
	}

	private function getUrl()
	{
		return new Http_Url(self::URL_TEMPLATE);
	}
}

 

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ