Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Сделать пост запрос. длинный с русскими буквами.


Автор: burakov 21.11.2012, 23:43
Добрый день.

необходимо запостить POST запросом данные на форум.

подсмотрел в андипаросе.
контент шифруется 

вот таким вот образом.

SLAVA2+%C4%E0+%ED%E5+%F1%EA%E0%E6%E8%2C+%EF%F0%EE%F4%E8%EB%E0%EA%F2%E8%EA%E0+%EE%F7%E5%ED%FC+%EF%EE%EB%E5%E7%ED%E0%FF+%E2%E5%F9%FC.+%C4%E0%E2%E0%E9+%EE%F2%E2%EB%E5%F7%B8%ED%ED%EE+%EF%EE%E4%F3%EC%E0%E5%EC.+%C2%EE%F2+%ED%E5+%E1%FB%EB%EE+%E1%FB+%E2%EE%E7%EC%EE%E6%ED%EE%F1%F2%E8+%F3%E3%ED%E0%F2%FC+%F2%E0%F7%EA%F3+%E2+%E4%F0%F3%E3%EE%EC+%E3%EE%F0%EE%E4%E5+%E8+%F1%EF%EE%EA%EE%E9%ED%EE+%ED%E0+%ED%E5%E9+%EA

попробовал на нем URI::Escape
расшифровало с плюсами отчего то

SLAVA2+Да+не+скажи,+профилактика+очень+полезная+вещь.+Давай+отвлечённо....

Моя задача вот так зашифровать текст в кодировке cp1251 и отправить.

делаю как обычно, всегда полчалось (и в этом случае получается, если строку обрезать до 1000 символов).
но мне нужно отправить больше.

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

делал $str = uri_escape ($str);
не помогает (не постит).

в чем тут дело? как зашифровать точно также? 
(uri_escape как то по другому визуально шифрует - без плюсов .. ну и еще какие то различия на глаз есть)


СПАСИБО.



Код

    my $method = 'POST'; 
    my $url = 'http://test4.ru/post.php';
    # my $postdata = 'action=addnew&forum='.$forum_number.'&topictitle='.$topictitle.'&description=&color=black&size=12&inpost='.$inpost.'&showsmiles=yes&html=no&submit=%CE%F2%EF%F0%E0%E2%E8%F2%FC';
    my $postdata = 'action=addnew&forum='.$forum_number.'&topictitle='.$topictitle.'&description=&color=black&size=12&inpost='.$inpost.'&showsmiles=yes&html=no&submit=';
    push (@{ $lwp->requests_redirectable }, 'POST');
    my $req = HTTP::Request -> new (
    'POST' => $url,
        [
            'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0',
            'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
            'Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7',
            'Referer' => 'http://test4.ru/register.php?PHPSESSID='.$sid,
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Cookie' => 'PHPSESSID='.$sid.'; lastvisit='.time(),
        ]
    );

    $req -> content ($postdata);
    my $res = $lwp -> request ($req); 


Автор: Arantir 22.11.2012, 03:06
Попробуйте закодировать в base64. Очень распространенный способ для устранения проблем с кодировками.

Автор: burakov 22.11.2012, 08:33
Я попробую.. но я же как бы LWP посывалю запрос на сервер, то есть он должен быть в таком виде, чтобы сервер его расшифровал. (то есть как бы строкой вида

SLAVA2+%C4%E0+%ED%E5+%F1%EA%E0%E6%E8%2C+%EF%F0%EE%F4%E8%EB%E0%EA%F2%E8%EA%E0+%EE%F7%E5%ED%FC+%EF%EE%EB%E5%E7%ED%E0%FF+%E2%E5%F9%FC.+%C4%E0%E2%E0%E9+%EE%F2%E2%EB%E5%F7%B8%ED%ED%EE+%EF%EE%E4%F3%EC%E0%E5%EC.+%C2%EE%F2+%ED%E5+%E1%FB%EB%EE+%E1%FB+%E2%EE%E7%EC%EE%E6%ED%EE%F1%F2%E8+%F3%E3%ED%E0%F2%FC+%F2%E0%F7%EA%F3+%E2+%E4%F0%F3%E3%EE%EC+%E3%EE%F0%EE%E4%E5+%E8+%F1%EF%EE

)

иначе.. может быть и не расшифрует?
что это за шифрация такая. 
дело в том, что я закодировал (попробовал) URI::Escape.. номер не прошел. пост не опубликовался. 
то есть нужно точно сказать. в чем мне его и чем кодировать?

Автор: ginnie 22.11.2012, 10:14
burakov, возможно этот фрагмент поможет  smile 

Код

use HTTP::Request::Common;

my $url = 'http://test4.ru/post.php';
my $sid = '10000000000000000000';
my $req = POST $url,
    'User-Agent' => 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0',
    Accept => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7',
    Referer => 'http://test4.ru/register.php?PHPSESSID='.$sid,
    Cookie => 'PHPSESSID='.$sid.'; lastvisit='.time(),
    Content => [
        action => 'addnew',
        forum => 1234,
        inpost => 'SLAVA2 Да не скажи, профилактика очень полезная вещь. Давай отвлечённо',
    ];

warn $req->as_string;

Автор: burakov 22.11.2012, 10:23
Спасибо,
код попробую, но все таки.. 
хотелось бы просто модуль для правильной перекодировки. (бездумной smile)

ну есть же URI::Escape

также говорят
вот это может помочь

 use URI::Encode;
    my $uri     = URI::Encode->new( { encode_reserved => 0 } );
    my $encoded = $uri->encode($data);

но ни черта не помогает. smile.


Автор: ginnie 22.11.2012, 10:39
Уважаемый burakov,  вот не стыдно заставлять меня все за Вас делать? Можно было самому посмотреть код в HTTP::Request::Common и увидеть:

Код

use URI;

my $uri = URI->new('http://test4.ru/post.php');

$uri->query_form(
    {
        inpost => 'SLAVA2 Да не скажи, профилактика очень полезная вещь. Давай отвлечённо...',
    }
);

warn $uri->query;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)