LINUX.ORG.RU

SSL & GET troubles


0

0

столкнулся с такой проблемой , при включеном SSL (apache2) перестали работать некоторые cgi скрипты на перле .
проблема в том , что я передаю некоторые параметры методом GET в utf-8 
так вот без https все работает , а при https видно что 
вместо строчки в utf-8 передается подобная хрень %E1%83%99%E1%83%9D%E1%83%A0%E1%83%9E%E1%83%9D%E1%83%A0%E1%83%90%E1%83%AA%E1%83%9
8%E1%83%A3

как с этим можно бороться ?

дистр Debian etch ,apache2 2.2.3-4


★★

все решилось вот этой процедурой 

sub urldc{
        my $val = @_[0];
        $val=~s/\+/ /g;
        $val=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
        return $val;
}

теперь не ясно это проблема mod CGI или apache ? 
почему при https в методе get не обрабатывается запрос до конца ? 

j262 ★★
() автор топика

Это проблемы кривого протокола http
он не обязан передавать ничего кромк 7 битовых строчек символов
а симаолы и давно и сейчас нужно лично перекодировать ж))

anonymous
()
Ответ на: комментарий от anonymous

в том-то и разница что при http 
в скрипте работает 
use CGI;
my $q=new CGI;
my $name = $q->param('name');

и после этого в $name попадает уже то , что мне надо 
а при https нет 

кароче сегодня гляну ,что там в сорсе mod CGI  может быть по этому поводу .

j262 ★★
() автор топика

я просто не корректно выразился 
подобная хрень %E1%83%99%E1%83%9D%E1%83%A0%E1%83%9E%E1%83%9D%E1%83%A0%E1%83%90%E1%83%AA%E1%83%9

полюбому передается в строке в аддресной строке , но при http переменная имеет кошерный вид 

j262 ★★
() автор топика

sub from_cgi($)
{
my $str=$_[0];
$str =~ tr/+/ /;
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego;
return $str;
}

sub to_cgi($)
{
my $str=$_[0];
$str =~ s/([^\w\*\-\.\@ _])/sprintf('%%%.2X',unpack('C',$1))/ego;
$str =~ tr/ /+/;
return $str;
}

где-то так нужно. С этим работает и по http и по https

vtVitus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.