Фев 212012
 

Часто на странице есть множество input`ов с уже заполненными значениями. Если их 2-3, то парсинг не утомляет, а вот если это например форма изменения информации в какой-нибудь соц. сети — это быстро надоедает.

Сегодня как раз столкнулся с такой ситуацией, моя лень пошла на пользу — спарсил все инпуты одной регэкспой, а затем изменил значения только необходимых инпутов.

Сама регэкспа:

<input.*?name=['|"](?<name>.*?)['|"].*?value=['|"](?<value>.*?)['|"].*?>

Модификаторы: m (multiline), i (case insensitive).

Использование на PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
preg_match_all('/<input.*?name=[\'|"](?<name>.*?)[\'|"].*?value=[\'|"](?<value>.*?)[\'|"].*?>/im', $page, $matches);
$post = array();
foreach ($matches['name'] as $key => $value) {
	$post[$value] = $matches['value'][$key];
}
// Смотрим POST: print_r($post);
// В случае, если форма не одна - удаляем ненужные инпуты с помощью unset
 
// Модифицируем некоторые значения:
$post['Email'] = $username;
$post['Passwd'] = $password;
$post['timeStmp'] = time();
 
// Формируем RAW POST, если используется cURL, то этого можно не делать
$raw = http_build_query($post);