пускать домен в дроп рисковано, не факт что вы его перехватите даже сделав предварительные заявки у основных регистраторов, если конечно не у всех:)
1) регаем новый домен.
2) переносим сайт на новый домен, делаем редирект постраничный со старого на новый домен.
4) ждем когда перетекут тиц и пр.
из очевидных минусов данного способа - падение трафа(обычно временное), не сразу перейдет тиц(про сапе временно можно забыть).
других вариантов нету.
Bioblocker, включите опцию CURLOPT_VERBOSE и дебажте заголовки, что за куку отправили/получили.
опять таки без более подробного листинга, трудно что либо сказать.
не автоматизировал подобные вещи, но представления имею как.
1) грузим страницу GET запросом с установкой куки где находится форма отправки
2) грузим капчу GET запросом с тойже кукой, что при первом запросе
3) отправляем данные POST|GET запросом
что вы привели кусок кода, ни о чем не говорит о последовательности ваших действий.
что там секретного в форме с тремя полями может быть?
выложили бы здесь, мож помогут, общими усилиями.
FollowLocation, так и есть.
ну если локатион укажет на другой домен. надо рвать текущее соединение и инициировать curl по новой.
пробовал делать и такое решение.
function curl_send($url, $data, $referer = '', $is_redirect = false, $redirects = 0) { global $fh, $host; $ch = curl_init(); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_STDERR, $fh); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0'); curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); if ($data != false && $is_redirect != true) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } $data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (($http_code == 301 || $http_code == 302) && ++$redirects < 10) { preg_match('/(Location:|URI:)(.*?)\n/', $data, $matches); if (isset($matches[2])) { $redirect_url = trim($matches[2]); if ($redirect_url !== '') { curl_close($ch); $redirect_url = $host.$redirect_url; // надо проверять на текущий хост, если не ведет на другой домен return curl_send($redirect_url, false, $referer, true, $redirects); } } } curl_close($ch); return $data; }
код надо дорабатывать, логика понятна. соединение рвется при редиректе и конектится по новой.
<?php$url = "http://www.site.com/login";$host = "www.site.com";$data = "UserName=test@mail.ru&Password=123456&CreatePersistentCookie=true";$fh = fopen('curl.out', 'a');function curl_flollow_exec($ch, $redirects = 0) { global $host; // что бы не парсить реферер curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); $data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if (($http_code == 301 || $http_code == 302) && ++$redirects < 10) { preg_match('/(Location:|URI:)(.*?)\n/', $data, $matches); if (isset($matches[2])) { $redirect_url = trim($matches[2]); if ($redirect_url !== '') { curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_URL, $host.$redirect_url); return curl_flollow_exec($ch, $redirects); } } } return $data;}function curl_post($url, $data) { global $fh; $ch = curl_init(); curl_setopt($ch, CURLOPT_STDERR, $fh); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0'); curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_flollow_exec($ch); curl_close($ch); return $result;}echo curl_post($url, $data);fclose($fh);?>
тоже решил заморочиться, все сработало нормально.
verbose:
у ТС заработало.
обратного я не утверждал.
ТС делает так curl_setopt($ch, CURLOPT_URL, $redirect_url) где $redirect_url = "/account_page"
1) в хидере "Location" внутренний адрес, пробуйте добавить к нему хост и правельно передать через CURLOPT_URL.
2) как бы при редиректе на до закрыть текущее соединение curl, и по новой инициировать.
flint2000, md5 это хеш. задавались вопросом как получить исходную строку("декодировать")? или вам этого не надо?