Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярка для извлечения name/value hidden-полей 
:(
    Опции темы
web0rabbit
Дата 23.5.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.5.2010

Репутация: нет
Всего: нет



Для реализации авторизации роботом нужно:
1. вырезать из страницы name и value hidden-полей,
2. добавить значение $login и $password
3. склеить url для http-запроса

Вот код:

Код

// вырезаем из html-страницы name и value у hidden-полей
if (preg_match_all('/<input.+>/U', $content, $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[$attribs['name']]=$attribs['value'];
            }
        }
    }
}
// клеим урл
echo http_build_query($param);



В чём трудности:
На странице есть хидден-поля с одинаковыми нэймами, но разными значениями..
для блока авторизации и регистрации.
Вот name=value этих 2х блоков:
1. авторизации:
Цитата


MfcISAPICommand = SignInWelcome
bhid = DEF_CI
UsingSSL = 1
inputversion = 2
lse = false
lsv =
..


2. регистрации:

Цитата

MfcISAPICommand = RegisterEnterInfo
co_partnerId = 2
siteid = 0
..



наглый http_build_query($param) берёт первый нэйм из блока авторизации, а значение к нему приравнивает из блока регистрации. Получается:

Цитата

MfcISAPICommand=RegisterEnterInfo&bhid=DEF_CI&UsingSSL=1..


Подскажите, пожалуйста, как отсечь один блок хидден-полей от другого?
PM MAIL   Вверх
NewDima
Дата 23.5.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Вообще-то http_build_query все делает правильно, а вы сами затираете то, что было взято из блока авторизации вот этим кодом
Код

$param[$attribs['name']]=$attribs['value'];

Каждое новое значение затирает старое.
Если нужно сохранить и то и другое, то логику поменять нужно.
Вместо кода выше что-то типа этого:
Код

$param[$attribs['name']]=$attribs['value'];
if (isset($param[$attribs['name']])) {
    if (is_array($param[$attribs['name']])) {
        $param[$attribs['name']][] = $attribs['value'];
    } else {
        $param[$attribs['name']] = array($param[$attribs['name']], $attribs['value']);
    }
} else {
    $param[$attribs['name']] = $attribs['value'];
}

PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.