powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с кодировкой модуля Perl HTTP
3 сообщений из 3, страница 1 из 1
Помогите с кодировкой модуля Perl HTTP
    #39444972
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой код:
Код: php
1.
2.
3.
4.
5.
6.
my $ua = $self->{'ua'};
my $req = HTTP::Request->new((defined($params) ? 'POST' : 'GET') => $url);
$req->authorization_basic($cfg->{'api'}->{'username'}, $cfg->{'api'}->{'password'});
#$req->content_type("text/plain; charset='utf8'");
$req->content($params) if (defined($params));
my $res = $ua->request($req);


Если в $params я передаю кириллицу (в utf8), то получаю ошибку "HTTP::Message content must be bytes".
Пробовал подобрать кодировку в content_type, также пробовал предварительно делать encode* переменной $params, никак не могу получить читаемый результат.
При этом такое работает правильно (при запуске в юникодной консоли):
Код: plaintext
curl -u usr:pwd --data 'stream api { url  http://123:321@apitest.com;]http://123:321@apitest.com;  meta comment "имя потока"}'  http://192.168.1.33:8080/flussonic/api/config/stream_create 
Подскажите, как должны кодироваться параметры POST-запроса, чтобы сервер понял кириллицу?
...
Рейтинг: 0 / 0
Помогите с кодировкой модуля Perl HTTP
    #39448147
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uue/base64 encode строку перед тем как пихнуть ее в параметры. Ну а там где обрабатываешь будешь соответтсвенно декодировать.

HTTP в заголвках очень плохо относится к non-printable ASCII characters. Бывают сервера и клиенты которые могут это обойти, но это чрезвычайно редко и вообще ненадежно.
Проще всего, если всегда следовать правилу: в заголовке HTTP запроса и ответа не использовать символов вне ASCII 32 - 126. То есть от пробела, до тильды в самой примитивной ASCII таблице.
...
Рейтинг: 0 / 0
Помогите с кодировкой модуля Perl HTTP
    #39448423
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, я кодировками я уже разобрался.
Но я работаю с конкретным сервером (Flussonic), который юникод понимает, поэтому сделал так:
Код: php
1.
2.
$req->content_type("text/plain; charset='utf8'");
$req->content(encode('utf-8', $params));


С этим сервером все работает, и проще делать отладку при необходимости.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с кодировкой модуля Perl HTTP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]