bashkir102

Рейтинг
28
Регистрация
13.12.2012

пускать домен в дроп рисковано, не факт что вы его перехватите даже сделав предварительные заявки у основных регистраторов, если конечно не у всех:)

ах-ах:
Что вообще посоветуете делать?

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:

* About to connect() to www.site.com port 80 (#0)
* Trying 50.56.211.113... * connected
* Connected to www.site.com (50.56.211.113) port 80 (#0)
> POST /login HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0
Host: www.site.com
Accept: */*
Referer: http://www.site.com/login
Content-Length: 74
Content-Type: application/x-www-form-urlencoded

< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Location: /sna****/followingplus
< Server: Microsoft-IIS/7.5
* Added cookie siteFORMAUTH="C3C99C1733A....." for domain www.site.com, path /, expire 1384861666
< Set-Cookie: siteFORMAUTH=C3C99C1733AF......; expires=Tue, 19-Nov-2013 11:47:46 GMT; path=/
< Date: Mon, 04 Nov 2013 20:47:46 GMT
< Content-Length: 140
<
* Connection #0 to host www.site.com left intact
* Re-using existing connection! (#0) with host www.site.com
* Connected to www.site.com (50.56.211.113) port 80 (#0)
> GET /snatches/followingplus HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0
Host: www.site.com
Accept: */*
Referer: http://www.site.com/login
Cookie: siteFORMAUTH=C3C99C1733AFE4......

< HTTP/1.1 200 OK
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Content-Type: text/html; charset=utf-8
< Expires: -1
< Vary: Content-Encoding
< Server: Microsoft-IIS/7.5
* Added cookie ASP.NET_SessionId="l0zatrxduaeuj2......." for domain www.site.com, path /, expire 0
< Set-Cookie: ASP.NET_SessionId=l0zatrxduaeu.......; path=/; HttpOnly
< Date: Mon, 04 Nov 2013 20:47:46 GMT
< Content-Length: 42319
<
* Connection #0 to host www.site.com left intact
* Closing connection #0
AutoBlogger:
---------- Добавлено 04.11.2013 в 20:13 ----------

Я это сделал. Почитал заголовки и просто заменил POST на GET и все заработало!

Всем спасибо.

у ТС заработало.

bukachuk:
Там по другому не бывает, это же заголовки http

обратного я не утверждал.

ТС делает так curl_setopt($ch, CURLOPT_URL, $redirect_url) где $redirect_url = "/account_page"

1) в хидере "Location" внутренний адрес, пробуйте добавить к нему хост и правельно передать через CURLOPT_URL.

2) как бы при редиректе на до закрыть текущее соединение curl, и по новой инициировать.

flint2000, md5 это хеш. задавались вопросом как получить исходную строку("декодировать")? или вам этого не надо?

Всего: 216