Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: обработка ссылок или чтото вроде того...  (Прочитано 45456 раз)
0 Пользователей и 1 Гость смотрят эту тему.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« : 06-02-2007 16:21 » 

имеетня ссылка,находяшаяся на какомто сайте... , например www.pupkin.su/perl_script.pl?ID=12345 .при клике на нее, она должна передавать ,какимто образом,ID перлскрипту, который находится на совершенно другом серваке. аа перл скрипт должен принять этот ID.

ВОПРОС: как это сделать =)

перерыл имеюшиеся книжку. но там не написанно о таком... вроде есть чтото типа GET и POST. но я не понял как они работают, и как их использовать для моей цели.

помогите пожалуйста. заранее спасибо.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 06-02-2007 16:34 » 

Скорее всего перенаправить запрос на другой сервак.
У тебя используется метод Get. Поэтому смотриш в книжке, как перл скрипт получает значение переменных, посланых Get методом.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 06-02-2007 16:40 » 

да вот нет в книжке такого. в инете поиск пока не привел ни к чему путномую. =(
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 06-02-2007 16:41 » 

Кстати, как у тебя на странице будет создаваться запрос? Если через тэг form, то в этом тэгэ есть атрибут action в который можно вписать страницу перенаправления запроса. Если у тебя запрос идет ввиде ссылки, то почему нельзя сразу сделать прямую ссылку на другой сервак?

Добавлено через 57 секунд:
В перле точно не знаю, надо ждать RXL.
« Последнее редактирование: 06-02-2007 16:45 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 06-02-2007 16:52 » 

запрос... хм... по идее на страничке должен бысть яваскрипт., в котором нахлдится ссылка на перл скрипт и ID, который и должен приянять, а потом и обработать скрипт на серваке... обработка дело понятное, но вот как его принять.... =(

у меня должно получиться чтото типа... на сайте находится типа баннер, когда я кликаю на него, то его ID передается на серв. вот так...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-02-2007 17:06 » 

а зачем ждать
http://www.google.com.ua/search?q=perl+%D0%BC%D0%B5%D1%82%D0%BE%D0%B4+Get+&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ru-RU:official

CAHTA_, где искал?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 06-02-2007 19:15 » 

Примерно так. Тут учтено кодирование не-ascii символов.
Код: (Perl)
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_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 07-02-2007 16:41 » 

CAHTA_, прежде чем что-то "юзать", нужно понять теорию.
Почитай о протоколе HTTP версии 1.1 (RFC 2616 или книжку какую) - там описаны форматы параметров.
Да и по Perl-у тебе нужно что-нибудь почитать.

Добавлено через 4 минуты и 36 секунд:
в одной книжке нашел пример, вот только не работает гад!

Читай книжку и по шагам разбери программу. Если с чем будет затыл - спрашивай, но "как работает программа" - не надо. На то и пример дан _в книжке_, а не на пустом месте.

Посмотрел код. Тут наборшиком или тобой допущена ошибка - пропущен символ, но подсказывать не буду.
« Последнее редактирование: 07-02-2007 16:46 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 07-02-2007 17:38 » 

CAHTA_, запускай в консоли, а как начнет работать, тогда уже в web.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 07-02-2007 17:45 » 

дык.
через шелл тож не фурычит. таже ошибка...

Код:
-bash: ./banner.pl: /usr/binperl: bad interpreter: No such file or directory

в чем трабла то?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 07-02-2007 17:50 » 

Найди два отличия:
Код:
#! /usr/binperl -wT

Код:
#!/usr/bin/perl -wT
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 07-02-2007 19:06 » 

См. справочник по модификаторам оператора s/// - "q" там нет. Опять опечатка.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 08-02-2007 20:30 » 

CAHTA_, ошибка на ошибке...

Во-первых, ты объявил тип в заголовке во второй строке (в ней же и завершил заголовок).
Во-вторых, ты вызываешь ф-ию, которой нет в пакете CORE (стандартные ф-ии). Кде у тебя use ... ?
В третьих, 6-я строка вообще бредовая. Ты понимашь, как работает ф-ия print ? Не уже ли ты надеешься выведя ссылку (просто текст ссылки!) получить картинку?

Опиши человеческим языком, что ты хочешь получить.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 09-02-2007 06:47 » 

нужно что бы скрипт возвращал заголовок специальный.

я же написал уже. в скрапте имеется адресс на картинку ( или не картинку).
к этому скрипту обрашается тег на сайте...<img src="http:/www.pupkin.com/cgi-bin/script.pl">
(когда загружается страничка!) и скрипт должен возвратить заголовок на эту картинку, чтобы она загрузилась на сайте...

я даже не знаю как это по другому объяснить...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 09-02-2007 07:51 » 

Короче, додумываю за тебя: картинка лежит на другом сайте, адрес может меняться.

Тебе нужно: редирект запроса.

Результат выглядит так:
Код:
HTTP/1.1 302 Found
Location: http://rampsoft.bhe.ru/picts/banner.bmp
... прочие элементы ...

Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 09-02-2007 08:01 » 

ну да... =)



Добавлено через 12 минут и 3 секунды:
а как этот "редирект запроса" организовать?
« Последнее редактирование: 09-02-2007 08:13 от CAHTA_ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 09-02-2007 11:50 » 

CAHTA_, проснись! Уже пятница начиается!

Код: (Perl)
#!/usr/bin/perl
print "HTTP/1.1 302 Found\r\nLocation: http://rampsoft.bhe.ru/picts/banner.bmp\r\n\r\n";
Вот и весь код.

Еще раз, настоятельно рекомендую прочесть rfc2616.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 09-02-2007 14:09 » 

ок почитаю. но вот прога не работает!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 09-02-2007 14:26 » 

Я сейчас буду ругаться или перестану отвечать Сколько можно!
Сколько можно отвечать односложными фразами? Это кому нужно - тебе или мне?
Пиши подробно!!!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 09-02-2007 14:46 » 

Так:
Код: (Perl)
#!/usr/bin/perl
print "Location: http://rampsoft.bhe.ru/picts/banner.bmp\r\n\r\n";

В общем, строки можно тут терминировать как \n, так и \r\n - Апач все равно их разбирает и компонует заголовок сам.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 10-02-2007 14:14 » 

Не "типа замены", а оператор замены. Первая часть - шаблон, вторая - подстановка, третья - модификаторы. Модификатор "e" означает, что подстановка - код, который нужно выполнить для каждого участка текста, найденого по шаблону, а результат работы вставить вместо этого участка.
"%" не является зарезервированным символом в рег.выр., след. это просто символ. pack() см. в мануале.

Сдается мне, ты так ни книг, ни мануалов не читал... Учи матчасть!

Путное начнется после прочтения мануала, а не от гадания на кофейной гуще. Все описанное есть в мануале, который прилагается к Perl в штатной поставке. Для полее приятного чтения рекомендую: "Программирование на Perl" (Programming Perl) Ларри Уолл, Том Кристиансен и Джон Орвант. Книга издательства O`Reilly или переводное русское издание - Символ. На обложке - одногорбый верблюд (в O`Reilly любят помещать животных на обложку). Книгу можно использовать как для обучения, так и как справочник.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 11-02-2007 12:38 » 

CAHTA_, я вижу, что ты учится не собираешься. Т.ч. открывай книги, мануалы и пр. доки и читай, читай, читай...

В последнем посте тебе поможет описание HTTP.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 11-02-2007 15:54 » 

да вот именно что этот пример я взял из книги... в консоли он работает. а вот через веб - нет.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 11-02-2007 16:13 » 

Согласись, нужно ведь понимать, как работает, а не просто набирать примеры. Эта ошибка уже встречалась в этой теме дважды.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 11-02-2007 17:14 » 

как работает param я читал. как его можно в 4ех вариациях использовать. по вот почему такая ошибка, я не пойму!

Добавлено через 31 минуту и 43 секунды:
странно.
 =)
теперь вс работает...
заменил строку на
print "content-type:text/html\n\n";

там изза \n\n все не работало... сглупил =)
« Последнее редактирование: 11-02-2007 17:45 от CAHTA_ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 11-02-2007 19:00 » 

CAHTA_, в следующий раз первым делом проверяй логи сервера.
Тут было достаточно информации для диагностики:
Цитата
malformed header from script. Bad header=name=dd: /opt/home/***/***/public_html/cgi-bin/b_sys.pl
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Guru
Гость
« Ответ #33 : 12-02-2007 10:23 » 

имеетня ссылка,находяшаяся на какомто сайте... , например www.pupkin.su/perl_script.pl?ID=12345 .при клике на нее, она должна передавать ,какимто образом,ID перлскрипту, который находится на совершенно другом серваке. аа перл скрипт должен принять этот ID.

ВОПРОС: как это сделать =)

перерыл имеюшиеся книжку. но там не написанно о таком... вроде есть чтото типа GET и POST. но я не понял как они работают, и как их использовать для моей цели.

помогите пожалуйста. заранее спасибо.

use CGI;
my $n=new CGI;
my $ID=n->param('ID');

Этого достаточно?
« Последнее редактирование: 15-12-2007 16:37 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 12-02-2007 10:39 » 

Guru, ты уверен, что ему именно это нужно? Конечно чисто IMHO, но ему учиться нужно, а не готовые ответы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 12-02-2007 19:22 » 

усе... разобрался во всем. если что.. задам еше вопросов.
RXL, спасибо за ман =)
Записан
Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines