@Zimaell

Как авторизоваться на амазоне через CURL PHP?

Написал функцию для входа на амазон (нужно для некоторых действий авторизовываться)

function amazon_authorization($email,$password){
	$cookie_file='/var/www/html/cookies/'.md5(date("Y-m-d H:i:s")).'.txt';
	$fp=fopen($cookie_file,'w'); fclose($fp);
	$url='https://www.amazon.co.uk/ap/signin?_encoding=UTF8';
	$url.='&ignoreAuthState=1';
	$url.='&openid.assoc_handle=gbflex';
	$url.='&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select';
	$url.='&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select';
	$url.='&openid.mode=checkid_setup';
	$url.='&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0';
	$url.='&openid.pape.max_auth_age=0';
	$url.='&openid.return_to=https%3A%2F%2Fwww.amazon.co.uk%2F%3Fref_%3Dnav_signin';
	$url.='&switch_account=';
	# заходим на страницу авторизации
	$ch=curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);
	curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
	curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
	curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0');
	curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
	$content=curl_exec($ch);
	# Получение скрытых полей
	$url_referer=$url;
	if(!preg_match('/<form name="signIn".*?<\/form>/is',$content,$form)) die('Failed to find log in form!');
	$form=$form[0];
	if(!preg_match('/action=(?:\'|")?([^\s\'">]+)/i',$form,$act)) die('Failed to find login form url');
	$url=$act[1];
	$c=preg_match_all('/<input type="hidden"\s*name="([^"]*)"\s*value="([^"]*)"/i',$form,$hiddenFields);
	$postFields=array();
	for($i=0; $i<$c; ++$i){ $postFields[$hiddenFields[1][$i]] = $hiddenFields[2][$i]; }
	# добавление своего пароля и логина
	$postFields['email']=$email;
	$postFields['password']=$password;
	$post='';
	foreach($postFields as $key=>$value){ $post.=$key.'='.urlencode($value).'&'; }
	$post=substr($post,0,-1);
	# авторизация
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_REFERER,$url_referer);
	curl_setopt($ch,CURLOPT_POST,TRUE);
	curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
	$content=curl_exec($ch);
	curl_close($ch);

	echo $content;

	unlink($cookie_file);
	return true;
	}

Итог - выдает капчу

Important Message!
To better protect your account, please re-enter your password and then enter the characters as they are shown in the image below.

Проверил, все скрытые поля совпадают, вроде все правильно, но всегда капча...

Подскажите что я не так могу делать?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solutions Architect, AWS Certified, Hybrid Cloud
Амазон так не обманешь. Пользуйтесь API
Ответ написан
BojackHorseman
@BojackHorseman Куратор тега PHP
...в творческом отпуске...
вы не до конца эмулируете процесс авторизации в браузере. сниффер вам в помощь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы