CAHTA_
|
|
« : 06-02-2007 16:21 » |
|
имеетня ссылка,находяшаяся на какомто сайте... , например www.pupkin.su/perl_script.pl?ID=12345 .при клике на нее, она должна передавать ,какимто образом,ID перлскрипту, который находится на совершенно другом серваке. аа перл скрипт должен принять этот ID. ВОПРОС: как это сделать =) перерыл имеюшиеся книжку. но там не написанно о таком... вроде есть чтото типа GET и POST. но я не понял как они работают, и как их использовать для моей цели. помогите пожалуйста. заранее спасибо.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 06-02-2007 16:34 » |
|
Скорее всего перенаправить запрос на другой сервак. У тебя используется метод Get. Поэтому смотриш в книжке, как перл скрипт получает значение переменных, посланых Get методом.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
CAHTA_
|
|
« Ответ #2 : 06-02-2007 16:40 » |
|
да вот нет в книжке такого. в инете поиск пока не привел ни к чему путномую. =(
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #3 : 06-02-2007 16:41 » |
|
Кстати, как у тебя на странице будет создаваться запрос? Если через тэг form, то в этом тэгэ есть атрибут action в который можно вписать страницу перенаправления запроса. Если у тебя запрос идет ввиде ссылки, то почему нельзя сразу сделать прямую ссылку на другой сервак?
Добавлено через 57 секунд: В перле точно не знаю, надо ждать RXL.
|
|
« Последнее редактирование: 06-02-2007 16:45 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
CAHTA_
|
|
« Ответ #4 : 06-02-2007 16:52 » |
|
запрос... хм... по идее на страничке должен бысть яваскрипт., в котором нахлдится ссылка на перл скрипт и ID, который и должен приянять, а потом и обработать скрипт на серваке... обработка дело понятное, но вот как его принять.... =(
у меня должно получиться чтото типа... на сайте находится типа баннер, когда я кликаю на него, то его ID передается на серв. вот так...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 06-02-2007 17:06 » |
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #6 : 06-02-2007 19:15 » |
|
Примерно так. Тут учтено кодирование не-ascii символов. sub parse($\%) { my ($query, $ref) = @_; my ($i, $encoded, $decoded);
$query =~ s/\+/ /g;
foreach $encoded (split(/\&/, $_[0])) { $decoded = "";
for($i = 0; $i < length($encoded); $i++) { if(substr($encoded, $i, 3) =~ m/%[[:xdigit:]]{2}/) { $i++; $decoded .= chr(hex(substr($encoded, $i, 2))); $i++; } else { $decoded .= substr($encoded, $i, 1); } }
$decoded =~ m/^([a-z0-9]+)=([^=]+)$/ or next; $ref->{$1} = $2; } }
my %parm;
parse($ENV{QUERY_STRING}, %parm);
|
|
« Последнее редактирование: 06-02-2007 19:23 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #7 : 07-02-2007 16:29 » |
|
RXL,чесно говоря, малочто понял... =( как этот код юзать чтобы он работал? Добавлено через 311 день, 21 час, 8 минут и 40 секунд:в одной книжке нашел пример, вот только не работает гад! #! /usr/binperl -wT use strict; print "content-type:text/html\n\n"; my %FORM; my @pairs = split(/&/, $ENV{'QUERY_STRING'}); foreach (@pairs){ my ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eq; $FORM{$name} = $value; } print <<HTML; <HTML> <HEAD><TITLE>вывод формы</TITLE></HEAD> <BODY BGCOLOR="#ffffff"> <CENTER><H3>вывод формы</H3></CENTER> <P> HTML foreach(keys %FORM){ print "$_ = $FORM{$_}<BR>"; } print <<HTML; </BODY> </HTML> HTML
|
|
« Последнее редактирование: 16-12-2007 13:38 от CAHTA_ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #8 : 07-02-2007 16:41 » |
|
CAHTA_, прежде чем что-то "юзать", нужно понять теорию. Почитай о протоколе HTTP версии 1.1 (RFC 2616 или книжку какую) - там описаны форматы параметров. Да и по Perl-у тебе нужно что-нибудь почитать. Добавлено через 4 минуты и 36 секунд:в одной книжке нашел пример, вот только не работает гад!
Читай книжку и по шагам разбери программу. Если с чем будет затыл - спрашивай, но "как работает программа" - не надо. На то и пример дан _в книжке_, а не на пустом месте. Посмотрел код. Тут наборшиком или тобой допущена ошибка - пропущен символ, но подсказывать не буду.
|
|
« Последнее редактирование: 07-02-2007 16:46 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #9 : 07-02-2007 17:34 » |
|
было пропушенно целых 2 символа... да да , я знаю... и мне очень стыдно =) my ($name, $value) = split(/=/, $_ ); $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eq; но скрипт всеравно не работает... выдает The server encountered an internal error or misconfiguration and was unable to complete your request. в логах вот что пишется... [Wed Feb 7 20:25:34 2007] [error] (2)No such file or directory: exec of /opt/home/***/***/public_html/cgi-bin/banner.pl failed [Wed Feb 7 20:25:34 2007] [error] [client 81.25.53.76] Premature end of script headers: /opt/home/***/***/public_html/cgi-bin/banner.pl
хотя файл 100% там есть...
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #10 : 07-02-2007 17:38 » |
|
CAHTA_, запускай в консоли, а как начнет работать, тогда уже в web.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #11 : 07-02-2007 17:45 » |
|
дык. через шелл тож не фурычит. таже ошибка... -bash: ./banner.pl: /usr/binperl: bad interpreter: No such file or directory в чем трабла то?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 07-02-2007 17:50 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #13 : 07-02-2007 18:13 » |
|
мнда... точняк. =) стыдно... но проблеммы на этом не кончаются... syntax error at ./banner.pl line 10, near "$FORM{$name} = $value;" (Might be a runaway multi-line ;; string starting on line 9) Execution of ./banner.pl aborted due to compilation errors. 06: foreach (@pairs){ 07: my ($name, $value) = split(/=/, $_); 08: $value =~ tr/+/ /; 09: $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eq; 10: $FORM{$name} = $value; 11: }
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #14 : 07-02-2007 19:06 » |
|
См. справочник по модификаторам оператора s/// - "q" там нет. Опять опечатка.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #15 : 08-02-2007 18:32 » |
|
хм. с этим разобрался... следуюший вопросик =) на какомто сайте имеется тег <img src="http:/www.pupkin.com/cgi-bin/script.pl"> в script.pl в $data имеется адресс на картинку. как сделать так чтобы при загрузке странички с тегом, картинка отображалась? вот попытался это сделать. но видимо чтото я не догнал. помогите... #! /usr/bin/perl -wT print "content-type:text/html\n\n";
my($data); $data = "http://rampsoft.bhe.ru/picts/banner.bmp"; print header(-type => "image/bitmap"),$data; при запуске с шелла выдается сообшение. указывает на последнюю строку скрипта. Undefined subroutine &main::header called at ./b.pl
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #16 : 08-02-2007 20:30 » |
|
CAHTA_, ошибка на ошибке...
Во-первых, ты объявил тип в заголовке во второй строке (в ней же и завершил заголовок). Во-вторых, ты вызываешь ф-ию, которой нет в пакете CORE (стандартные ф-ии). Кде у тебя use ... ? В третьих, 6-я строка вообще бредовая. Ты понимашь, как работает ф-ия print ? Не уже ли ты надеешься выведя ссылку (просто текст ссылки!) получить картинку?
Опиши человеческим языком, что ты хочешь получить.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #17 : 09-02-2007 06:47 » |
|
нужно что бы скрипт возвращал заголовок специальный.
я же написал уже. в скрапте имеется адресс на картинку ( или не картинку). к этому скрипту обрашается тег на сайте...<img src="http:/www.pupkin.com/cgi-bin/script.pl"> (когда загружается страничка!) и скрипт должен возвратить заголовок на эту картинку, чтобы она загрузилась на сайте...
я даже не знаю как это по другому объяснить...
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #18 : 09-02-2007 07:51 » |
|
Короче, додумываю за тебя: картинка лежит на другом сайте, адрес может меняться. Тебе нужно: редирект запроса. Результат выглядит так: HTTP/1.1 302 Found Location: http://rampsoft.bhe.ru/picts/banner.bmp ... прочие элементы ...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #19 : 09-02-2007 08:01 » |
|
ну да... =)
Добавлено через 12 минут и 3 секунды: а как этот "редирект запроса" организовать?
|
|
« Последнее редактирование: 09-02-2007 08:13 от CAHTA_ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #20 : 09-02-2007 11:50 » |
|
CAHTA_, проснись! Уже пятница начиается! #!/usr/bin/perl print "HTTP/1.1 302 Found\r\nLocation: http://rampsoft.bhe.ru/picts/banner.bmp\r\n\r\n"; Вот и весь код. Еще раз, настоятельно рекомендую прочесть rfc2616.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #21 : 09-02-2007 14:09 » |
|
ок почитаю. но вот прога не работает!
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #22 : 09-02-2007 14:26 » |
|
Я сейчас буду ругаться или перестану отвечать Сколько можно отвечать односложными фразами? Это кому нужно - тебе или мне? Пиши подробно!!!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #23 : 09-02-2007 14:31 » |
|
извини если запустить через шелл то выдает HTTP/1.1 302 Found Location: http://rampsoft.bhe.ru/picts/banner.bmp
а если через веб, то The server encountered an internal error or misconfiguration and was unable to complete your request.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #24 : 09-02-2007 14:46 » |
|
Так: #!/usr/bin/perl print "Location: http://rampsoft.bhe.ru/picts/banner.bmp\r\n\r\n"; В общем, строки можно тут терминировать как \n, так и \r\n - Апач все равно их разбирает и компонует заголовок сам.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #25 : 09-02-2007 20:50 » |
|
если не трудно. можешь объяснить работу кода? $query =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg; [0-9A-H]{2} - последовательность из 2ух символов. s///eg тож понятно. типа замены. но вот что за % и pack('C',hex($1)) понять не могу. путного ничего не нашел... пока. =(
|
|
« Последнее редактирование: 16-12-2007 13:39 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #26 : 10-02-2007 14:14 » |
|
Не "типа замены", а оператор замены. Первая часть - шаблон, вторая - подстановка, третья - модификаторы. Модификатор "e" означает, что подстановка - код, который нужно выполнить для каждого участка текста, найденого по шаблону, а результат работы вставить вместо этого участка. "%" не является зарезервированным символом в рег.выр., след. это просто символ. pack() см. в мануале.
Сдается мне, ты так ни книг, ни мануалов не читал... Учи матчасть!
Путное начнется после прочтения мануала, а не от гадания на кофейной гуще. Все описанное есть в мануале, который прилагается к Perl в штатной поставке. Для полее приятного чтения рекомендую: "Программирование на Perl" (Programming Perl) Ларри Уолл, Том Кристиансен и Джон Орвант. Книга издательства O`Reilly или переводное русское издание - Символ. На обложке - одногорбый верблюд (в O`Reilly любят помещать животных на обложку). Книгу можно использовать как для обучения, так и как справочник.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #27 : 11-02-2007 09:17 » |
|
а что если .... #! /usr/bin/perl -wT
print <<HTML; Content-type: text/html HTML
use strict; use lib qw(/usr/local/apache/lib/perl); use CGI qw(:standard escape escapeHTML); #use WebDB;
func_1(param("name"));
sub func_1 { my ($name_0)=@_; print "name=$name_0"; }
вот только через веб ошибка. The server encountered an internal error or misconfiguration and was unable to complete your request. в логах апатча [Sun Feb 11 12:15:06 2007] [error] [client ***] malformed header from script. Bad header=name=dd: /opt/home/***/***/public_html/cgi-bin/b_sys.pl
в браузере вводил http://***/cgi-bin/b_sys.pl?name=dd
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #28 : 11-02-2007 12:38 » |
|
CAHTA_, я вижу, что ты учится не собираешься. Т.ч. открывай книги, мануалы и пр. доки и читай, читай, читай...
В последнем посте тебе поможет описание HTTP.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #29 : 11-02-2007 15:54 » |
|
да вот именно что этот пример я взял из книги... в консоли он работает. а вот через веб - нет.
|
|
|
Записан
|
|
|
|
|