Толь лыжи не едут, толь я на асфальте...use LWP::UserAgent;В результате на своем index.cgi в $ENV вижу CONTENT_LENGTH = 0. Зато появляется HTTP_SERVER = www.mytest.com
my $browser = LWP::UserAgent->new;
my $url = 'http://my.testtest.net/cgi-bin/index.cgi';
my @web_headers = ( );
my @web_data = ( 'server' => 'www.mytest.com' );
...
$response = $browser->post( "$url", @web_headers, @web_data);
...
print $response->content;
Такая штука только при попытке выполнить скрипт с постом перлом.
Т.е. в браузере заполняя поля вручную CONTENT_LENGTH имеет значение и нет лишних енв-переменных (и также curl`ом проверял с -d)C HTTP::Request::Common через request(POST '$url', @web_data) таже картинка.
пробовал фря/федора и мод-перл/cgi
http://www.perlmonks.org/?node_id=193917очень странное решение
> Толь лыжи не едут, толь я на асфальте...Конечно на асфальте, вы же не объяснили общественности форума, чего хотите добиться.
Выдохните, успокойтесь, напишите заново, перечитайте, желательно вслух, исправьте все замечания, которые возникли при прочтении, перечитайте заново, и только потом нажмите кнопку "Отправить".
Объясняю:
смотрим сюда http://search.cpan.org/dist/libwww-perl/lib/LWP/UserAgent.pm
ну... как бы... по гайду 1:1
А результат - переданные данные ПОСТом попадают в ЕНВ (окружение апача)
Работающее решение нашел. НО:
1. он не удобно, да и в коде костыльно идёт.
2. в ЛВП заявлено, но както нетак реализовано? или я всётаки туплю?
С лвп не сталкивался никогда, даже не возникало необходимости.
> Объясняю:Не умеете вы объяснять.
>> Объясняю:
> Не умеете вы объяснять.Объясняю:
1) $ua->post( $url, \%form )
2) $ua->post( $url, \@form )Отправляем форму на сервер. Форма (набор "поле-значение" _формы_) задана массивом или хешем. В вызов post() передается указатель на массив или хеш.
3) $ua->post( $url, \%form, $field_name => $value, ... )
Форма задана указателем, всё остальное - это заголовки HTTP-запроса.
4) $ua->post( $url, $field_name => $value,... Content => \%form )
5) $ua->post( $url, $field_name => $value,... Content => \@form )Форма задана указателем, который передается в ключе Content, всё остальное - это заголовки HTTP-запроса.
6) $ua->post( $url, $field_name => $value,... Content => $content )
В ключе Content передан произвольный текстовый контент, отправляемый POST-запросом, всё остальное - это заголовки HTTP-запроса.
Вы написали:
$response = $browser->post( "$url", @web_headers, @web_data);
Два массива, переданных не как указатели, разделить нельзя.
Соответственно, содержимое @web_data будет воспринято аналогично содержимому @web_headers.Поэтому контент пустой, а все, что вы запихнули в массивы, передалось как заголовки HTTP.
Как правильно сделать, я подсказывать не возьмусь, так-как не вполне уверен, что всё остальное правильно, например я не вижу необходимости в @web_headers, т.к. он пустой.
Я бы сделал например так:$response = $browser->post( "$url", @web_headers, Content => \@web_data);
Но нечетное количество элементов в @web_headers всё сломает.
Если @web_headers вам не нужны, то тогда надо так:
$response = $browser->post( "$url", \@web_data);
Чтобы всё это окончательно было понято, рассмотрим структуру POST-запроса.
Пример (строки пронумерованы мной):1)POST /path/script.cgi HTTP/1.0
2)User-Agent: HTTPTool/1.0
3)Content-Type: application/x-www-form-urlencoded
4)Content-Length: 32
5)
6)home=Cosby&favorite+flavor=flies
Строки 2-4 - заголовки запроса. 5 - разделитель. 6 - Тело запроса, в формате, соответствующем Content-Type и имеющее длину Content-Length.Заголовки формируются из @web_headers, тело запроса формируется из @web_data.
Спасибо!
нужно было ткнуть меня в "указатель"... из серии смотрю в книгу - вижу фигу. А сначала то работало, а потом перехимичил... чукча же - писатель!
И не ломается, если массив/хеш формировать правильно, вроде как-то так: 'Поле' => ""
Насчёт заголовка: default_header(@web_headers)
и спасибо!