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

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

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

chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

18 дек 2004, 14:20

Question писал(а): Пробовал, тоже так и выводит
В смысле 'тоже так и выводит'? "\n" в двойных кавычках заменяется на символ перевода строки (0x0A) и как строка '\n' появляться не будет. В худшем случае он будет отображаться как пробел, или вообще никак.
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

18 дек 2004, 15:46

2AiK
Сразу бросаются в глаза такие отличия:
1 при запуске с винта есть _REQUEST["submit"] и _POST["submit"] со значением "отправить"
2 CONTENT_TYPE = multipart/form-data; boundary=----------7XJU5qpnvC2H9PpYG2ryab с винта
и
CONTENT_TYPE = multipart/form-data; boundary=xYzZY из скрипта
3 Также отл HTTP_CONNECTION: "Keep-Alive, TE" и "close"

Очень интересна переменная SERVER_ADDR - получается, только по ней можно отлавливать объявления, добавляемые из левых скриптов?
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

18 дек 2004, 16:08

2chur
да, в двойных кавычках все по-другому - вообще бред какой-то получается: все отправляемые поля воспринимаются как 2 сообщения, часть из них добавляется в первое, часть - во второе. Само сообщение добавляется в виде "строка1", т.е. часть "строка2" вообще исчезает
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

18 дек 2004, 16:30

1) Это по-моему ни на что влиять не должно. Вряд ли скрипт обрабатывает эту переменную, да и скорее всего не все браузеры её передают.
2) То же вряд ли на что влияет. В RFC 2616 можно уточнить, но по-моему важна только уникальность идентификатора, а длина не важна
3) А это уже интересно. Похоже скрипт передаёт запрос по протоколу HTTP/1.0, а не HTTP/1.1. Возможно тебе не хватает заголовка Host.
4) SERVER_ADDR - это адрес, по которому скрипт запускается, в данном случае test.php. Определять левые запросы можно только по полю referer. Защищаться можно и другими способами, но грамотно эмулированный запрос отловить невозможно.
Даже самый дурацкий замысел можно воплотить мастерски
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

24 дек 2004, 23:51

При запуске с винта HTTP_CONNECTION=
Keep-Alive, TE - в опере
Keep-Alive - в ие
У меня получилось передать "Keep-Alive" таким образом:

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

my $ua = LWP::UserAgent->new(keep_alive=>'1');
"Keep-Alive, TE" передать не получается
Может как-то влияют эти переменные

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

"HTTP_ACCEPT" = text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
"HTTP_ACCEPT_CHARSET" = windows-1252;q=1.0, utf-8;q=1.0, utf-16;q=1.0, iso-8859-1;q=0.6, *;q=0.1
"HTTP_ACCEPT_ENCODING" = deflate, gzip, x-gzip, identity, *;q=0
"HTTP_ACCEPT_LANGUAGE" = en
"HTTP_TE" = deflate, gzip, chunked, identity, trailers
а что за "заголовок host"?
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

25 дек 2004, 04:26

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

29 дек 2004, 21:05

нда.. теперь совпадают все переменные кроме одной:

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

Connection => 'Keep-Alive, TE',
    TE => "deflate, gzip, chunked, identity, trailers",
в результате "HTTP_CONNECTION = Keep-Alive, TE, close", т.е. "Keep-Alive, TE" в чистом виде передать не получается
может дело именно в этом?
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

30 дек 2004, 00:32

Question, ну не предусматривает стандарт такого значения у заголовка. Вообще для HTTP/1.1 имеет смысл указывать только Connection: close, так как по умолчанию подразумевается Keep-Alive. Могу спорить, что форма этот заголовок никак не обрабатывает.
Даже самый дурацкий замысел можно воплотить мастерски
Question
Сообщения: 9
Зарегистрирован: 14 дек 2004, 13:29

30 дек 2004, 17:36

Вообще для HTTP/1.1 имеет смысл указывать только Connection: close, так как по умолчанию подразумевается Keep-Alive
если я не указываю Connection => 'Keep-Alive, TE', то connection=close
Могу спорить, что форма этот заголовок никак не обрабатывает.
3) А это уже интересно. Похоже скрипт передаёт запрос по протоколу HTTP/1.0, а не HTTP/1.1. Возможно тебе не хватает заголовка Host.
я так понял, что дело именно в этом. А как передать Host?
Библиотека автоматически добавляет поля заголовка "Host" и "Content_length" к HTTP запросу перед отправкой его по сети
Может дать урл этой доски? Запрос от формы там обрабатывает та же страница, на к-рой находится форма(причем формат .htm, хотя наверно это неважно). Может есть какие-то особенности, о к-рых я не подозреваю?
Аватара пользователя
AiK
Сообщения: 2274
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

31 дек 2004, 02:55

А как передать Host?
согласно rfc2616 так:
Host: http://www.host.ru
Может дать урл этой доски
Может. Правда очень сомнительно, что там есть "чего-то особенного" ©
Даже самый дурацкий замысел можно воплотить мастерски
Ответить