ФорумПрограммированиеPHP для идиотов → В ответ на POST-запрос страница с пустой формой

В ответ на POST-запрос страница с пустой формой

  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, полдень

    Вот код:

    $login=$_POST['login'];
    $password=$_POST['password'];
    $param_user[userid]=$login;
    $param_user[pass]=$password;

    // посылаем запрос на страницу авторизации
    function SendData($url , $params = null){
    $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ref='http://my.ebay.de/ws/eBayISAPI.dll?MyEbayBeta&MyEbay=&gbh=1&guest=1';
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_HEADER, 1); // заменить на 0
    if($params){
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__). DIRECTORY_SEPARATOR . 'cook.txt');
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__). DIRECTORY_SEPARATOR . 'cook.txt');
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, $ref);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
    $result=curl_exec($ch);
    curl_close ($ch);
    return $result;
    }

    // посылаем запрос -> получаем html-страницу
    $url_ebay='https://signin.ebay.com/ws/eBayISAPI.dll?SignIn';
    $content = SendData($url_ebay);
    // вот что получили:
    //var_dump($content);

    // вырезаем из html-страницы name и value у hidden-полей
    if ($forms=preg_split('/<form.+/U', $content)){
    if (preg_match_all('/<input.+>/U', $forms[1], $matches, PREG_PATTERN_ORDER)) {
    $inputs = $matches[0];
    foreach ($inputs as $input) {
    if (preg_match_all('/(value|type|name)="(.*?)"/', $input, $matches, PREG_PATTERN_ORDER)) {
    $attribs = array_combine($matches[1], $matches[2]);
    if (isset($attribs['type']) && $attribs['type'] == 'hidden') {
    //echo $attribs['name'] . ' = ' . $attribs['value']?><br/><?php
    $param_ebay[$attribs['name']]=$attribs['value'];
    }
    }
    }
    }
    }

    $param_ebay_for_get=array_merge($param_ebay, $param_user);
    //var_dump($param_ebay_for_get);
    // клеим урл
    echo http_build_query($param_ebay_for_get);

    // посылаем запрос на страницу авторизации
    $signin=SendData($url_ebay, $param_ebay_for_get);
    var_dump($signin);


    А в итоге получаем:
    HTTP/1.1 100
    Continue HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Set-Cookie: ebay=%5Ecv%3D15555%5Esbf%3D%23%5E;
    Domain=.ebay.com;
    Path=/ Set-Cookie: dp1=bu1p/QEBfX0BAX19AQA**4ddcadb3^pbf/%2344ddcadb3^;
    Domain=.ebay.com;
    Expires=Thu, 24-May-2012 07:20:19 GMT;
    Path=/ Set-Cookie: s=BAQAAASi4KMI9AAWAAPgAIEv8y7NjYTAzY2ZiNjEyODBhMDI2NjI3MmY2ODJmZmQ5MGI2MAASAApL/MuzdGVzdENvb2tpZRzZTkBMCmAF3mYC+dbpTpdZiGZM;
    Domain=.ebay.com;
    Path=/ Set-Cookie: nonsession=CgADKACBVYXuzY2EwM2NmYjYxMjgwYTAyNjYyNzJmNjgyZmZkOTBiNjAAywACS/uBOzE20DPYtw**;
    Domain=.ebay.com;
    Expires=Wed, 25-May-2011 07:20:19 GMT;
    Path=/ Cache-Control: private
    Pragma: no-cache
    Content-Type: text/html;
    charset=UTF-8
    Content-Length: 17483
    Date: Tue, 25 May 2010 07:20:18 GMT


    И страницу авторизации с незаполненной формой.

    Подскажите, пожалуйста, что я не так делаю, где искать ошибку, что ещё попробовать чтобы этот код таки работал?
    Заранее большое спасибо за внимание и ваши умные мысли.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 25, 2010, 12:24 п.п., спустя 23 минуты 57 секунд

    что я не так делаю
    живешь
    Сапожник без сапог
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 12:31 п.п., спустя 7 минут 43 секунды

    phpdude, к сожалению, это самый разумный из существующих вариантов..
    убиться намного нерациональнее..

    по делу идеи есть? почему не получается залогиниться?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 25, 2010, 12:35 п.п., спустя 4 минуты 4 секунды


    phpdude, к сожалению, это самый разумный из существующих вариантов..
    убиться намного нерациональнее..

    по делу идеи есть? почему не получается залогиниться?
    смотреть надо, а некогда :)
    Сапожник без сапог
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 12:37 п.п., спустя 1 минуту 14 секунд

    ошибка не в ДНК
    разбей задачу на этапы, на каждом из этапов должен быть получен результат
    и не пиши так:

    $login=$_POST['login'];
    $password=$_POST['password'];
    $param_user[userid]=$login;
    $param_user[pass]=$password;

    заплюют
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 12:45 п.п., спустя 8 минут 5 секунд

    куда хоть смотреть:

    1. Неправильный запрос?
    or
    2. Неправильные параметры для запроса?
    or
    3. Неправильный урл?
    or
    4. Неизвестная комбинация неправильностей?
    Спустя 174 сек.
    Faster, если можно - поподробнее, пожалуйста, как разбить?
    Я вот вроде бы и разбивала и по этапам делала, соединила - не пашет ((

    Как правильно, чтоб не плевали?
    Ато я итак вся мокрая..
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 12:50 п.п., спустя 5 минут 15 секунд

    упрости задачу
    убери парсинг, вбей ручками переменные
    ну и добавь curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1);
    Спустя 104 сек.
    это твой урл
    https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1
    а не https://signin.ebay.com/ws/eBayISAPI.dll?SignIn
    на который нужно посылать данные курлом
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 12:59 п.п., спустя 9 минут 17 секунд

    Faster, пробовала с https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1
    так даже страницы не выдаёт,
    поэтому решила, что это я не правильно придумала и заменила на урл из первого запроса..
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 1:02 п.п., спустя 2 минуты 25 секунд

    страницы не выдает, потому что редирект идет
    какой код возвращает хидер?
    потому я сказал юзать curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1);
    чтобы получить не промежуточный редирект, а конечную страницу, на которую попадаешь после логина.
    вы вообще себе механизм авторизациии как представляеете? опишите
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 1:16 п.п., спустя 14 минут 1 секунду

    Вот заголовки, которые получились при https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1
    HTTP/1.1 100
    Continue HTTP/1.1 302 Moved Temporarily
    Server: Apache-Coyote/1.1
    RlogId: p4plaijkehq%60%3C%3Ds%7D%2Bpplaijk667-128ce5a6b30
    Location: http://pages.ebay.com/messages/page_not_responding.html?eBayErrorEventName=p4plaijkehq%60%3C%3Ds%7D%2Bpplaijk667-2010.05.25.00.25.51.792.MST
    Content-Length: 0
    Date: Tue, 25 May 2010 07:25:51 GMT

    механизм авторизации.. хм:
    посылаю запрос,
    на удалённом сервере проверятся есть ли такой юзер в базе,
    если есть инициируется сессия, идёт редирект на страницу моего аккаунта,
    я в ответе получаю закрытую страницу сайта
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 1:21 п.п., спустя 5 минут 33 секунды

    Faster, с curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1)
    отбразилась станица "Page Not Responding",
    что, собственно, и следовало ожидать..
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 25, 2010, 1:24 п.п., спустя 2 минуты 25 секунд

    web-bee, почему следовало? ты ддосишь их штоли?)))))))))))))))))))))))))
    Сапожник без сапог
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 1:38 п.п., спустя 14 минут 47 секунд

    phpdude, Я же ж не такая умная как ты ))
    тупо в хедере Location смотрела,
    а curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1), как я понимаю, эту страницу мне в баузер выводит..
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 2:42 п.п., спустя 1 час 3 минуты 21 секунду

    такссс
    поставь что нибудь, чем можешь посмотреть переменные POST передаваемые серверу (например плагин для лисы Firebug)
    и сравни с тем что ты отправляешь в

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 25, 2010, 3:02 п.п., спустя 20 минут 27 секунд

    Faster, я наверно ещё и не умею пользоватся этим Firebug. Я пыталась с помощью него отследить запросы при авторизации..
    у меня получилось 4 GET запроса, один из них, как я думала, авторизующий вот такой:
    ———————————
    GET
    http://srx.de.ebayrtm.com/rtm?RtmCmd&p=644:649:78:830:194:433:876:912&ph=0:0:0:0:0:0:0:0&ev=0:0:0:0:0:0:0:0&a=json&l=freya-herrin&g=7a2f44941270a0b58b26b0f6ffeec838&uf=1&c=1H4sIAAAAAAAAAFMOyShV8E2sVDAwUzA0tjIwsTIwV%2FANDlEwMjA04OUqMLQwsTU0tgCzjG0NLSyMgUwjYxNbXUtLXq7kzBRbQ6OYUgMDA0NeLgBhAzXsTAAAAA%3D%3D&ord=1273176247603&e=USC:2&z=10&bw=1020&cg=7a2f5b8e1270a0aad0b7e1d7ffa52265&enc=UTF-8&v=4&cb=vjo.dsf.assembly.VjClientAssembler._callback0&_vrdm=1273176243266

    Заголовки
    Server Apache-Coyote/1.1
    RlogId p4pphnmqj%3D9vl*tvsi33%3F-1286f37d208
    Cache-Control no-cache
    Expires 0
    P3P CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
    Set-Cookie A01=wNcDOeVcDAAAAAAAgAYunEE4A0HGgC8QQAIYXW..425%0378%04-1%060%03876%04-1%060%03433%04-1%060%03194%04-1%060%03649%04-1%060; Domain=de.ebayrtm.com; Path=/rtm RUATD=0%3BMTQ5NDEwOjEtMjEyMTkyNDB8MTQ1Nzg5OjAtMjExNTU2NjN8MTMyOTczOjEtMjEyMTkxNzM%3D; Domain=de.ebayrtm.com; Expires=Sat, 05-May-2012 20:04:09 GMT; Path=/rtm
    Content-Encoding gzip
    Content-Type application/x-javascript;charset=UTF-8
    Content-Length 1115
    Date Thu, 06 May 2010 20:04:08 GMT
    ————————————-
    Но форма-то авторизации на сайте с методом ПОСТ..

Пожалуйста, авторизуйтесь, чтобы написать комментарий!