Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка в HTTP-Realm, Хочется указать по-русски 
V
    Опции темы
tishaishii
Дата 15.1.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Заинтересовала кодировка в HTTP WWW-Authenticate(Realm).
Заголовки сервера:
Код
HTTP/1.0 401 пользователь не авторизован
WWW-Authenticate: Basic realm="пробная зона авторизации"
Connection: close
Content-Type: text/html


Писал русские быквы в кодировках utf8, unicode и cp1251. Каждый раз получал кракозябры.
Чтобы разобраться без обиняков, создал модель:
Код
#!/usr/bin/perl

package Object;

sub new($;@) {
    my($class, $self)=(shift, {@_});
    +bless $self, $class
}
sub server($) {+$_[0]{server}}

package Server;
use IO::Socket;
use base qw(Object);

sub new($;@) {
    my$self=shift->SUPER::new(@_);
    $self->{server}=IO::Socket::INET->new(
        LocalPort=>$self->{listen},
        Listen=>$self->{quee},
        TYPE=>&SOCK_STREAM(),
        Reuse=>1
    );
    $self->{server}->autoflush(1);
    my$old=select $self->{server};
    ($\, $,, $|)=("\n", "\t", 1);
    select $old;
    +$self
}
sub perform($$) {
    my($self, $client)=(shift, shift);
#    undef while defined($_=<$client>) && $self->{loop}->($self, $client, $_);
    undef while defined($_=<$client>) && /\S/os;
    $client->print(<<'.', $headers, scalar localtime);
HTTP/1.0 401 пользователь не авторизован
WWW-Authenticate: Basic realm="пробная зона авторизации"
Connection: close
Content-Type: text/html

.
    +$self
}

sub execute($) {
    my$self=shift;
    while(my$client=$self->server->accept) {
        if(defined(my$child_pid=fork)) {
            next if $child_pid;
            $self->{server}->close unless $child_pid;
            $self->perform($client);
            last
        } else {
            die "Can't fork"
        }
    } continue {
        close $client;
    }
    +$self
}

package main;

Server->new(
    listen=>2012,
    quee=>undef,
    loop=>sub($) {
        if($_[2]=~/\bdatetime\b/ios) {
            $_[1]->print(scalar localtime)
        } elsif($_[2]=~/\btime\b/) {
            $_[1]->print(time)
        } else {
            $_[1]->print($_[2]);
            +undef
        }
    }
)->execute


Запускаю:
Код
./test &


В telnet отрабатывает как нужно:
Код
telnet localhost 2012
у попа была собака,
он её любил.
она съела кусок мяса,
- он её убил

HTTP/1.0 401 пользователь не авторизован
WWW-Authenticate: Basic realm="пробная зона авторизации"
Connection: close
Content-Type: text/html


В браузере (Firefox, Opera, MSIE) запрашиваю http://192.168.0.2:2012, получаю окно с запросом имени и пароля, а в нём - краказябры.
Локаль на сервере: ru_RU.UTF-8
Клиент в виндовс (cp1251).
В какой кодировке должен быть текст, чтобы в браузере показывалось нормально?

Это сообщение отредактировал(а) tishaishii - 15.1.2012, 15:33
PM MAIL ICQ Skype   Вверх
Pfailed
Дата 16.1.2012, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Так может указать кодировку нужно? Content-Type: text/html; charset=UTF-8


--------------------
PM MAIL   Вверх
tishaishii
Дата 16.1.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Не помогает.
Код
«http://192.168.56.101:2012» запрашивает имя пользователя и пароль. Сайт сообщает: «ïðîáíàÿ çîíà àâòîðèçàöèè»

PM MAIL ICQ Skype   Вверх
tishaishii
Дата 16.1.2012, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Firefox использует ISO-8859-1, а другие - своё.
Так что, с русским, видимо, не прокатит.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.