The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"рамер метода пост"
Отправлено pheonix, 07-Окт-05 07:39 
#!/usr/bin/perl
package in;
BEGIN
    {
    $VERSION = '1.1';
    use Exporter();
    @ISA=qw(Exporter);
    @EXPORT=qw(%GET %POST %COOKIE %IN);
    use Storable qw(dclone nstore retrieve);
    
    if ($ENV{REQUEST_METHOD} eq "GET") {&ParseGet($ENV{QUERY_STRING});%GET=%{dclone(\%G)};undef %G;}
    if ($ENV{REQUEST_METHOD} eq "POST")
        {
        if ($ENV{CONTENT_TYPE}=~/^application\/x\-www\-form\-urlencoded/i) {&ParsePost;}
        if ($ENV{CONTENT_TYPE}=~/^multipart\/form\-data/i) {&ParsePostF;}
        }
    &ParseCookie;    
    %IN=(%POST,%GET,%COOKIE);
    # переменные окружения
    
    # ParseGet
    sub ParseGet(?)
        {
        ($data)=@_;
        undef %G;
        foreach (split(/&/,$data))
            {
            ($a,$b)=split(/=/,$_);    
            $a=URLDecode($a);
            $b=URLDecode($b);
            if (exists($G{$a}))
                {
                if (!ref $G{$a}) #esli net esho massiva
                    {
                    $_=$G{$a};
                    delete $G{$a};
                    push @{$G{$a}},$_;
                    }
                push (@{$G{$a}},$b);
                }
            else {$G{$a}=$b;}
            }
        return 0;
        }


    # ParsePost
    sub ParsePost
        {
        sysread(STDIN,$post,$ENV{CONTENT_LENGTH});
        &ParseGet($post);
        %POST=%{dclone(\%G)};
        undef %G;
        return 0;
        }
    
    
    # ParsePostF
    sub ParsePostF
        {
        sysread(STDIN,$post,$ENV{CONTENT_LENGTH});
        my $boundary_=$ENV{CONTENT_TYPE};
        $boundary_=~m/boundary=\-*([\w\/\+\\]+)/;
        $boundary_=$1;
        @boundary_=split(/-+$boundary_/,$post);
        pop @boundary_;
        shift @boundary_;
        
        foreach $param_ (@boundary_)
            {
            $param_=~s/^[\n\r]+//;
            ($head_,$data_)=split (/[\r\n]{4}/,$param_);
            $data_=~s/\r\n$//;
            #key
            $head_=~m/name="?(\w+)["; \r\n]/m;
            $key_=$1;
            #data
            if ($head_=~m/filename="?([^";\r\n]+)"?/m)
                {
                # filer to filename
                ${$POST{$key_}}[0]=$1;
                ${$POST{$key_}}[1]=$data_;
                }
            elsif (exists($POST{$key_}))
                {
                if (!ref $POST{$key_}) #esli net esho massiva
                    {
                    $_=$POST{$key_};
                    delete $POST{$key_};
                    push @{$POST{$key_}},$_;
                    }
                push (@{$POST{$key_}},$data_);
                }
            else {$POST{$key_}=$data_;}
            }
        return 0;
        }
    
    
    
    # ParseCookie
    sub ParseCookie
        {
        foreach (split(/; /,$ENV{HTTP_COOKIE}))
            {
            ($key_,$value_)=split(/=/,$_);
            URLDecode($key_);
            URLDecode($value_);
            #filters on cookie
            $COOKIE{$key_}=$value_;
            }
        return 0;
        }
    
    # unescape URL-encoded data
    sub URLDecode($)
        {    
        my $todecode = shift;
        $todecode =~ tr/+/ /;
        $todecode =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
        return $todecode;
        }
    }
1;


вот, но тут нет никаких ограничений
вызываеться в программе так $IN{key} и всё работает тока вот что-то он не до конца принимает всё что нужно:(

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру