Пытаюсь авторизоваться на ВКонтакте скриптом на php, до определённого момента всё идёт гладко, но потом появляется ошибка 400 Bad Request.
Суть в том, что на последнем шаге остается спарсить ссылку, что скрипт успешно делает, и перейти по ней. Тут-то и появляется ошибка 400, ведь если просто скопировать ссылку и перейти по ней - авторизация проходит.
<?
	$curl = curl_init();
	$browser = 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0';
	$data = [
				'email' => 'email@site.com'
				,'pass' => 'password'
			];
	// подготовительные данные
	$options = [
					CURLOPT_USERAGENT		=> $browser
					,CURLOPT_URL		=> 'http://m.vk.com'
					,CURLOPT_RETURNTRANSFER	=> 1
					,CURLOPT_TIMEOUT		=> 30
				];
	curl_setopt_array($curl, $options);
	$response = curl_exec($curl);
	// запрос делаем на мобильную версию ВКонтакте
	preg_match('/ip\_h\=(.*?)\&/is', $response, $match);
	$ip_h = $match[1];
	// парсим ip_h
	$url = 'https://login.vk.com/?act=login&_origin=http://m.vk.com&ip_h='.$ip_h.'&role=pda&utf8=1';
	// формируем url
	$options = [
					CURLOPT_USERAGENT		=> $browser
					,CURLOPT_URL		=> $url
					,CURLOPT_POSTFIELDS		=> http_build_query($data)
					,CURLOPT_POST		=> 1
					,CURLOPT_RETURNTRANSFER	=> 1
					,CURLOPT_HEADER		=> 1
					,CURLOPT_SSL_VERIFYPEER	=> 0
					,CURLOPT_SSL_VERIFYHOST	=> 0
					,CURLOPT_TIMEOUT		=> 30
                ];
	curl_setopt_array($curl, $options);
	$response = curl_exec($curl);
	// делаем запрос на сформированный url
	preg_match('/Location: (.*?)\n/is', $response, $match); 
	$url = $match[1];
	/*
		парсим оттуда ссылку на которую нас должно перебросить
		CURLOPT_FOLLOWLOCATION не включил, т.к так удобнее/
		Что интересно, если эту ссылку вывести на данном этапе,
		то перейдя по ней авторизация пройдёт до конца,
		и пользователь оказывается в своей новостной ленте.
		Ссылка вида
		http://m.vk.com/login?role=fast&to=&s=1&__q_hash=4baa84d796ed6a2d826ace41508614eb
		После запроса возвращается нужная кука и происходит переадресация на /
		Пробовал с абсолютно чистого браузера(открывал режим инкогнито),
		авторизация всё равно проходит до конца.
		Для того что-бы исключить фактор IP адреса, пробовал развернуть
		Open Server на своём ПК - результат такой же.
	*/
	$options = [
					CURLOPT_USERAGENT		=> $browser
					,CURLOPT_URL		=> $url
					,CURLOPT_RETURNTRANSFER	=> 1
					,CURLOPT_HEADER		=> 1
					,CURLOPT_TIMEOUT		=> 30
                ];
	curl_setopt_array($curl, $options);
	$response = curl_exec($curl);
	// делаем запрос на нужный url
	echo $response;
	// результат - 400 Bad Request
	curl_close($curl);