Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Автоматическое заполнение формы на чужом сайте

13K
28 апреля 2006 года
PavelX
20 / / 13.03.2006
Привет всем.
Нуждаюсь в совете разбирающегося в php.
Задача такая:
на чужом сайте есть простая форма: текстовое поле
и кнопка submit. Мне известен только url этого сайта.
У меня есть сообщение, которое нужно автоматически разместить в это текстовое поле и автоматически нажать submit на этом чужом сайте.

Повторю, мне неизвестно не имя полей, не имя формы, а только url этого сайта.

Как такое сделать?
8
28 апреля 2006 года
mfender
3.5K / / 15.06.2005
Никак. Надо знать имя поля и action формы.
13K
28 апреля 2006 года
PavelX
20 / / 13.03.2006
а эти параметры как-нибудь автоматически можно получить?
8
28 апреля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by PavelX
а эти параметры как-нибудь автоматически можно получить?


Открыть страницу, разложить её в каком-то DOM-анализаторе, и разобрать нужную форму. Но, тут автоматика весьма относительная... Программа-то никогда не узнает, какое поле чему соответствует.

15
28 апреля 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by PavelX
а эти параметры как-нибудь автоматически можно получить?


Прошу прощения за оффтоп. Спамом решил подработать?:)

8
28 апреля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by shaelf
Прошу прощения за оффтоп. Спамом решил подработать?:)


И к бабке не ходи - ясно, ясно как божий день.

13K
28 апреля 2006 года
PavelX
20 / / 13.03.2006
Зря вы так, ребята.
У меня условная задача: создать систему рассылки объявлений в бесплатные доски объявлений.
Решать ее не нужно, нужно только описать алгоритм.
Я все детали продумал, дошел до того как в назначенную минуту достать нужное сообщение из БД, а вот как засабмитить его на форму пока не придумал. По идее подразумевается, что пользователь не знает параметров формы.
Думал может через ХМL можно.

Если кто идею знает или может ссылку дать - помогите, очень нужно, да и задачу на половине бросать не охота.
8
28 апреля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by PavelX
У меня условная задача: создать систему рассылки объявлений в бесплатные доски объявлений.


Дык, это-то мы уже и поняли. Уж это-ли не спам?

Цитата:
Originally posted by PavelX Решать ее не нужно, нужно только описать алгоритм.
Я все детали продумал, дошел до того как в назначенную минуту достать нужное сообщение из БД, а вот как засабмитить его на форму пока не придумал. По идее подразумевается, что пользователь не знает параметров формы.
Думал может через ХМL можно.


Пойми: чудес не бывает. Ты можешь автоматизировать только процесс получения формы для её дальнейшей обработки и отправки своих данных её скрипту. Но вручную нужно поля этой формы сопоставить со своими полями. Т.е., фактически - 1 раз сопоставить с 1й формой. Зато потом будешь её пользовать налево-направо, пока админ ТОЙ доски не закроет вообще твой IP на свой сайт.

13K
28 апреля 2006 года
PavelX
20 / / 13.03.2006
ok man.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.

Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.

Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.
15K
28 апреля 2006 года
y4an
27 / / 20.04.2006
Цитата:
Originally posted by PavelX
ok man.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.

Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.

Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.



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

12
28 апреля 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by PavelX
ok man.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.

Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.

Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.



1) При чем тут GET?
2) По хорошему можно и не знать название полей. Как привило поля называют очеень похожими словами, так что если создать базу типичных слов, то можно и автоматически вычислить, что чего какое поле. Правда полной гарантии это не даст, но для очень значительного перечня сайтой результат будет какой нужно. К тому же, в форме поле с сообщением задано тегом TEXTAREA так что даже название для этого поля знать не обязательно. TEXTAREA и будет поле для сообщения.

Но тут есть другая тонкость: картинка на сайте. Движок просто не пропустит POST данные без некоего кода написанного на картинке. Так что весь смысл такого скрипта для значительной части сайтов (а сейчас этот метод защиты очень популярен) попросту пропадает. Конечно такого бота можно оснастить OCR (т.е. алгоритмом распознавания букв и цифр на картинке, как в FineReader) которая ПОПЫТАЕТСЯ обойти такого вида защиту.

13K
29 апреля 2006 года
PavelX
20 / / 13.03.2006
1) Я просто сравнил такую (строку с параметрами)
с той, что формируется при передачи с формы посредствам get-метода. Поэтому и get:)
2) Защиты картинками в той задаче, которую я решаю - нет.
Видишь, alekciy, в твоем решении тоже нужно знать параметры формы или переберать их.

Я к чему это все - видел в инете рекламу программ типа roboform, где обещают универсальность, поэтому и подумал, что
существует универсальный способ.
8
29 апреля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by PavelX
Я к чему это все - видел в инете рекламу программ типа roboform, где обещают универсальность, поэтому и подумал, что
существует универсальный способ.


Те, кто пишет эти робоформы берут деньги за то, что облазили тысячи сайтов и экстрадировали из них нужное для своей программы. Универсальность они предлагают - это непонятно для потребителя. Ты вот купился. Я, как человек чуть более подкованный, знаю физические основы этой ущниверсальности. Просто иного пути нет. Разве что владельцы сайтов будут тебе предоставлять свои данные о полях, методах и путях скриптов.

1.9K
29 апреля 2006 года
Ananim
156 / / 15.05.2005
Извините за глупый вопрос, но почему нельзя прочесть содержимое файла, который выдает форму? Я имею введу HTML код отосланный браузеру с сервера. Ведь как не крути его можно прочесть и узнать там, и action, и method, и имена полей.
13K
29 апреля 2006 года
PavelX
20 / / 13.03.2006
Вот над этим я сейчас и мучаюсь.

Посмотреть в ручную можно, однако в этом случае теряется универсальность программы. Пользователь должен будет сначала выбрать сайт, на который отправляется объявление (т.е. его форму), а затем отправить на него сообщение.

А можно как-то автоматически получить хтмл-код?
В этом случае придется писать анализатор этого кода. Вдруг на странице несколько форм, а мне нужна только последняя?
Т.е универсальность получается сомнительная.
12
30 апреля 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by PavelX
Видишь, alekciy, в твоем решении тоже нужно знать параметры формы или переберать их.


Нифига знать не обязательно. Достаточно в теле страницы найти тег FORM. Короче парсируем и анализируем страницу. Вообще Ananim уже верно высказался.

А можно как-то автоматически получить хтмл-код?
Требуем страницу с сервера и все. Сеть это связанные между собою нитью ссылок боооольшой ресурс ))) (HTML-то помнишь как расшифровывается).
Между прочим "Мне известен только url этого сайта.". ;)
Если ты не спамер, тебе анализатор и не нужен.

В этом случае придется писать анализатор этого кода.
А ты для какой задачи хочешь обойти без анализатора? )))

Вдруг на странице несколько форм, а мне нужна только последняя?
Мда... покажитека мне сайте, где их много ))) Форма для размещения теста на странице КАК ПРАВИЛО бывает одна.

к чему это все - видел в инете рекламу программ типа roboform,
Так в чем проблема? Уверен, что она универсальная: купи её!

Если судить по рекламе, то панацею уже изобрели, все болезни побеждены, мы гоняем на универсальных машинах, едим сбалансированню пищу которая полезная и придает нам новых сил... Просто удивительно, что при все при этом я еще не в раю.

Т.е универсальность получается сомнительная.
Неужели приходит понимание, что универсум недостижим?

13K
30 апреля 2006 года
PavelX
20 / / 13.03.2006
Опыт сын ошибок трудных.
Это я так.

Я понимаю, что мы можем получить страницу по url
:), но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.

Я слышал CGI может оказаться полезным в данном случае, это так?
8
30 апреля 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by alekciy
Мда... покажитека мне сайте, где их много ))) Форма для размещения теста на странице КАК ПРАВИЛО бывает одна.



Ну как же? Вот, к примеру страница, где я сейчас пишу этот ответ: я уже насчитал три формы - подписка на рассылку, поиск и, собственно форма, в которой я сейчас пишу.

15
30 апреля 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by PavelX
Опыт сын ошибок трудных.
Это я так.

Я понимаю, что мы можем получить страницу по url
:), но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.

Я слышал CGI может оказаться полезным в данном случае, это так?


Попробуй

 
Код:
fopen("http://ya.ru", "r")
может получится?:)
12
30 апреля 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by PavelX
но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.


:D
Это как раз самое простое. shaelf тут полностью прав. Читай внимательнее маны.

Цитата:
resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )


fopen() закрепляет именованый ресурс, указанный в аргументе filename, за потоком. Если filename передан в форме "scheme://...", он считается URL'ом и PHP проведёт поиск обработчика протокола (также известного как "обвёртка") для этой схемы. Если ни одна обвёртка не закреплена за протоколом, PHP выдаст замечание чтобы помочь вам отследить потенциальную проблему в вашем скрипте и продолжит выполнение, будто filename указывает на обыкновенный файл.

13K
30 апреля 2006 года
PavelX
20 / / 13.03.2006
А если на еще более бытовом уровне:
все-таки получится через fp=fopen("http://ya.ru","r")
получить доступ к коду или нет.
Если нет - то как?
12
30 апреля 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by PavelX
А если на еще более бытовом уровне:
все-таки получится через fp=fopen("http://ya.ru","r")
получить доступ к коду или нет.
Если нет - то как?


"В сад сударь, в сад!" (с) Трое в лодке не считая собаки.

Все же для начала стоит почитать документацию на РНР. Элементарнейший пример скрипта который получает содержимое страницы в виде строки. Потому это строку уже можно анализировать (к примеру пройтись по ней рядом регулярных выражений.

 
Код:
<?php
$file = file_get_contents ('http://alekciy.ru');
print $file;
?>

Таки образом мы получает доступ к HTML коду, но не как к РНР коду, если ты это имешь в виду. Да и РНР код в данной задаче СОВЕРШЕННО НЕ НУЖЕН. В остальном как я уже сказал... в сад! сад!
8
30 апреля 2006 года
mfender
3.5K / / 15.06.2005
Я вот только одного не пойму, к чему весь этот огород городить. Раз уж выяснили, что автоматом сопоставить поля формы с нужными полями не получается, то стоит ли вообще что-то для этого придумывать? Что так, что эдак - всё делать придётся в ручную. Так не проще ли взять такой знатный инструмент, каковым является DOM-инспектор в FireFox'е и с его помощью просто всё увидеть и сопоставить, раз уж лень читать код?
13K
30 апреля 2006 года
PavelX
20 / / 13.03.2006
mfender'у:
я хочу такой вариант предложить -
В ПС задается таблица со стандартными данными: имя, телефон, адрес...
Пользователь вводит новый урл, на который ему нужно закинуть объявление.
Программа: на этом урл'е такие-то поля: $phone, $name... Почти всегда имя соответсвует содрержанию. Как правило.
И дальше юзер вручную говорит: вот поле $name соответсвует полю "Имя" в моей таблице данных, его нужно заполнить значением из этой колонки и т.д.
Есть в этом здравый смысл?

А как по-другому.
Если через DOM-анализатор проще, то плиз, скажи как это устроить.
А то я раньше с этим не сталкивался.
8
01 мая 2006 года
mfender
3.5K / / 15.06.2005
Вот быстренько спозаранку набросал скриптик, который берёт страницу, выбирает из неё все формы и поля input с некоторыми аттрибутами полей (список нужных полей задан в массиве $attr функции removeAnotherAttributes). Разумеется, для работы скрипта нужен DOMXML.

Это иллюстрация, как можно вообще разобрать любой HTML-документ, чтобы получить из него что-то нужное.

Тебе нужны формы с их полями - вот тебе формы с полями input. Как чего и с кем сопоставить - думай дальше сам.

Код:
error_reporting(0);
$HTML = file_get_contents('http://forum.codenet.ru/newreply.php?s=&action=newreply&postid=138373');
$doc = new DOMDocument();
$doc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">' . $HTML);
$doc->formatOutput = true;
$xml = new DOMDocument("1.0", "windows-1251");
$forms = $xml->createElement("forms");
$xml->appendChild($forms);
foreach($doc->getElementsByTagName("form") as $form){
    $xmlForm = $xml->createElement("form");
    setAttributes($xmlForm, $form->attributes);
    $forms->appendChild($xmlForm);
    $inputFields = $form->getElementsByTagName("input");    
    foreach($inputFields as $input){
        $xmlInput = $xml->createElement("input");
        setAttributes($xmlInput, $input->attributes);
        $xmlForm->appendChild($xmlInput);
    }
}

echo $xml->saveXML();

function setAttributes(&$element, $DOMAttr){
    foreach($DOMAttr as $attr){
        if(removeAnotherAttributes($element->nodeName, $attr->name))
        $element->setAttribute($attr->name, $attr->value);
    }
}

function removeAnotherAttributes($nodeType, $attrName){
    $attr = array(
        'form' => array('action', 'method', 'name', 'id', 'enctype'),
        'input' => array('name', 'id', 'type', 'value')
    );
    return in_array($attrName, $attr[$nodeType]);    
}
13K
01 мая 2006 года
PavelX
20 / / 13.03.2006
Спасибо за такое внимание к моей проблеме.

А что такое DOMXML, который нужен для работы скрипта.
Я думаю, судя по вопросу, ты понял, что я не совсем разобрался в твоем скрипте.
Будь другом, скинь ссылку на какую-нибудь статью, которая поможет разобраться в твоем скрипте.

P.S. C праздником всех.
8
01 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by PavelX
А что такое DOMXML, который нужен для работы скрипта.
Я думаю, судя по вопросу, ты понял, что я не совсем разобрался в твоем скрипте.
Будь другом, скинь ссылку на какую-нибудь статью, которая поможет разобраться в твоем скрипте.



Не, ну ты ж попробуй запустить. Сейчас DOM у всех должен быть. А уж PHP5 сразу с ним, как и с MySQL.

Что касается документации - см. тут - самое лучшее пособие

12
01 мая 2006 года
alekciy
3.0K / / 13.12.2005
Я бы заметил, что DOM XML функции это в PHP 4, в 5-ой версии это уже просто DOM функции.
Насчет поддежки. Как правило он действительно включен, но бывает по разному. Что бы узнать, что же в данный момент поддерживается можно использовать такой скрипт:
 
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
echo phpinfo();
?>

что бы уж по ini не шариться.
12
01 мая 2006 года
alekciy
3.0K / / 13.12.2005
Кстати mfender написал скрипт используя DOM. На 4-ой версии пыха с его DOM XML функции loadHTML нет.
15
01 мая 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by alekciy
Кстати mfender написал скрипт используя DOM. На 4-ой версии пыха с его DOM XML функции loadHTML нет.


Он использует 5 версию PHP.

8
02 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by alekciy
Я бы заметил, что DOM XML функции это в PHP 4, в 5-ой версии это уже просто DOM функции.
.....
Кстати mfender написал скрипт используя DOM. На 4-ой версии пыха с его DOM XML функции loadHTML нет.



Ну да, ну да. Я их всегда путаю. DOM XML появился, если мне что-то не изменяет, в 4.4 версии, а в PHP5 его заменило другое расширение - DOM. Кстати, на мой субъективный взгляд, более удобное для работы.

Я действительно уже более полугода пользуюсь только PHP5. PHP4 - только в том, что уже на нём написано. Если есть новое и хорошее, то зачем пользоваться старым? Так что, уж не обессудьте...:)

12
02 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by mfender
если мне что-то не изменяет, в 4.4 версии


Изменяет. Поивилось это с 4.3.0.

Цитата:
а в PHP5 его заменило другое расширение - DOM. Кстати, на мой субъективный взгляд, более удобное для работы.


Ну вопрос удобства всегда проистекает из привычки ;) К чему больше привык, то и удобнее.
Если же объективно то:
1) DOM XML сейчас не поддерживает и только вопрос времени его схода со сцены.
2) DOM XML допускает себе вольности в трактовке спецификации. DOM функции РНР уже полностью соответствуют требованиям спецификации DOM Level 2.

12K
02 мая 2006 года
WithoutName
14 / / 09.10.2005
Еще можно посмотреть журнал "<удалено модератором>" за апрель 2006г.

[COLOR=red]Нужны конструктивные предложения. Если это не гиперссылка, то следует приводить хотя бы цитату из указанного источника. Иначе - это спам и флуд.[/COLOR]
1.9K
25 мая 2006 года
Mao
35 / / 06.11.2003
Цитата:
Originally posted by alekciy
1) При чем тут GET?
2) По хорошему можно и не знать название полей. Как привило поля называют очеень похожими словами, так что если создать базу типичных слов, то можно и автоматически вычислить, что чего какое поле. Правда полной гарантии это не даст, но для очень значительного перечня сайтой результат будет какой нужно. К тому же, в форме поле с сообщением задано тегом TEXTAREA так что даже название для этого поля знать не обязательно. TEXTAREA и будет поле для сообщения.

Но тут есть другая тонкость: картинка на сайте. Движок просто не пропустит POST данные без некоего кода написанного на картинке. Так что весь смысл такого скрипта для значительной части сайтов (а сейчас этот метод защиты очень популярен) попросту пропадает. Конечно такого бота можно оснастить OCR (т.е. алгоритмом распознавания букв и цифр на картинке, как в FineReader) которая ПОПЫТАЕТСЯ обойти такого вида защиту.

Поделитесь ссылками на алгоритмы парсинга графических букв и цыфр. Заранее спасибо.

12
26 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Mao
Поделитесь ссылками на алгоритмы парсинга графических букв и цыфр. Заранее спасибо.


На сколько мне известно, такого универсально скрипта еще не написано. А учитывая, что пользуються им спамеры, и слава богу, что ненаписано.

15
27 мая 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by alekciy
На сколько мне известно, такого универсально скрипта еще не написано. А учитывая, что пользуються им спамеры, и слава богу, что ненаписано.

Не любишь их?:) Хотя я бы не против, чтоб он был написан. Но я против того, чтоб его в паблик выложили... Хотя на сколько я знаю, то средствами PHP это сделать практически нереально (он не был предназначен для математический вычеслений, не функции есть конечно, но если загоняться по серьёзному, то он дохнет + время выполнения).

12
27 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by shaelf
Не любишь их?:) Хотя я бы не против, чтоб он был написан. Но я против того, чтоб его в паблик выложили... Хотя на сколько я знаю, то средствами PHP это сделать практически нереально (он не был предназначен для математический вычеслений, не функции есть конечно, но если загоняться по серьёзному, то он дохнет + время выполнения).


А кто их любит то?

*напевает на мотив "Полковника" Би-2*
Эх, спамера ни кто не ждет,
Не пишет...

А написать тако можно только из академического интереса. Хотя есть конторы, которые заявляют, что у нах такой скрипт есть и даже продают его.
Насчет того, на сколько это реально реализовать... думается реализовать вполне реально. Другое дело, что на каждом сайте на картинках используются разные шрифты. Если придется скрипт обучать для каждого сайта, то попросту пропадет смысл такой "автоматизации". Хотя с другой стороны для стандартных движков форумов используються одни и теже шрифты в картинке, и тут скрипт может развернуться.

15
27 мая 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by alekciy
А кто их любит то?


Для меня любой взлом делится на 2 категории:
1. Совершил хакер (в исконном смысле этого слова)
2. Которое совершил скрипткид.
Пункт первый у меня вызывает уважение, второй отвращение.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог