Я входил в свою учетную запись Amazon в течение многих лет, используя простую функцию curl, которую я написал. Этот код работал долгое время, пока пару дней назад Amazon не изменил свою страницу входа, и мой код перестал работать. Я ломал голову, пытаясь понять, в чем проблема. Кто-нибудь может помочь?
Вот мой текущий код:
<?php
$email = 'name@mycompany.com';
$password = 'password1234';
$URL = 'https://www.amazon.com/ap/signin?_encoding=UTF8&openid.assoc_handle=usflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.com%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Dgno_signin';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/amazoncookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/amazoncookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$page = curl_exec($ch);
if (!preg_match('/<form name="signIn".*?<\/form>/is', $page, $form)) {
die('Failed to find log in form!');
}
$form = $form[0];
if (!preg_match('/action="([^"]+)"/i', $form, $action)) {
die('Failed to find login form url');
}
$URL2 = $action[1];
$count = preg_match_all('/<input type="hidden"\s*name="([^"]*)"\s*value="([^"]*)"/i', $form, $hiddenFields);
for ($i = 0; $i < $count; ++$i) {
$postFields[$hiddenFields[1][$i]] = $hiddenFields[2][$i];
}
$postFields['email'] = $email;
$postFields['create'] = 0;
$postFields['password'] = $password;
$post = '';
foreach($postFields as $key => $value) {
$post .= $key . '=' . urlencode($value) . '&';
}
$post = substr($post, 0, -1);
curl_setopt($ch, CURLOPT_URL, $URL2);
curl_setopt($ch, CURLOPT_REFERER, $URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$page = curl_exec($ch);
Amazon обычно предоставляет множество API. Возможно, вы захотите найти тот, который соответствует вашим потребностям, вместо того, чтобы писать свой собственный разборщик.
Он не должен просто «перестать работать». У вас уже есть некоторые части отлова ошибок — какая из них срабатывает? Или есть какое-то дополнительное сообщение об ошибке?