Заполнение формы с помощью LWP

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

14 дек 2004, 13:50

Добрый день!

Пытаюсь добавить объявление на доску с помощью LWP. Скрипт вроде работает, данные передаются, но объявление упорно не принимается. Передаю Referer, user_agent, Content_type, все поля формы, в т.ч. и скрытые. Может нужно передавать что-то еще (скрипт могу привести)?

И еще. Как передавать текст сообщения с переводами на новую строку? Пробовал так "строка1%0Aстрока2", но сообщение в таком виде и добавляется (это на другой доске). Какие спецсимволы для этого использовать?
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

14 дек 2004, 14:06

Content-Length передаешь?
2B OR NOT(2B) = FF
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

14 дек 2004, 14:56

Content-type должен быть такой: application/x-www-form-urlencoded
Перевод строки как ни странно: %0D%0A :)
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

14 дек 2004, 15:29

Content-Length передаешь?
Нет. Надо попробовать
Content-type должен быть такой: application/x-www-form-urlencoded
Там такая форма: <form action="forma.htm" method="post" name="main" enctype="multipart/form-data">
т.е. Content-type должен быть multipart/form-data
Перевод строки как ни странно: %0D%0A
Пробовал и так. Добавляет "строка1%0D%0Aстрока2"
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

16 дек 2004, 14:30

Question, ты скорее всего формируешь запрос неправильно...
Даже самый дурацкий замысел можно воплотить мастерски
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

16 дек 2004, 21:29

Запрос я формирую вот так:
use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
my $ua = LWP::UserAgent->new;

$ua->cookie_jar(HTTP::Cookies->new(file => "lwpcookies.txt", autosave => 1));

my $result = $ua->request( POST 'http://урл_скрипта',
user_agent => 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.05',
Referer => 'http://урл_скрипта',
Content_type => 'multipart/form-data',
Content => [ MAX_FILE_SIZE => '1000000',
id => '1',
r => '1',
ads => 'строка1%0Aстрока2',
email => 'qwerty@qwerty.com.ua',
firm => 'yyyefrrey',
phone => '(055) 123-12-33',
person => 'qwetrf',
],
);
Это из "поваренной книги lwp", вроде все правильно
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

16 дек 2004, 22:05

Не пробовал просто написать ads => "строка1\nстрока2"? Скорее всего, что LWP ставит на этот параметр Content-Type: text/plain.
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

17 дек 2004, 02:34

Вообще говоря запрос выглядит несколько странным.
'multipart/form-data' подразумевает одновременную передачу как значений полей формы, так и двоичного контента, т.е. файла.
Тут же имя файла передаётся через куки (я, кстати, предпочитаю их передавать ручками, через соответствующий заголовок: Cookie => 'file="lwpcookies.txt"; autosave=1'), а самого содержимого файла как-то и нет. Что-то мне подсказывает, что если файл не передаётся, то всё ж Content-type должен быть application/x-www-form-urlencoded.

Рекомендую сделать вот что: натравить скрипт на простейший php скрипт:

Код: Выделить всё

<?
phpinfo();
?>
После чего туда же перенаправить форму и сравнить полученные результаты. Сразу увидишь, в чём различия.
Даже самый дурацкий замысел можно воплотить мастерски
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

18 дек 2004, 14:00

Не пробовал просто написать ads => "строка1\nстрока2"? Скорее всего, что LWP ставит на этот параметр Content-Type: text/plain.
Пробовал, тоже так и выводит
После чего туда же перенаправить форму и сравнить полученные результаты.
в смысле, что значит перенаправить форму?
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

18 дек 2004, 14:17

в смысле, что значит перенаправить форму?
Берёшь страницу с формой. Сохраняешь её на диск. И меняешь у неё action URL на http://blabla.ru/test.php.
Заполняешь форму и жмешь пимпу Submit. На открывшейся странице видишь все значения. Твой скрипт их должен передать ровно в том же виде.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить