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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LWP & ссылки на кириллице, не работает 
:(
    Опции темы
burakov
Дата 21.6.2013, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день, подскажите, что нужно сделать, чтобы LWP работал с кириллическими сслыками
мучался и так и эдак.
выдает response -> code == 500

Код

use strict;
use warnings;
use URI::Escape;

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTTP::Cookies;
use URI::Escape;

our $lwp = undef;
$lwp = LWP::UserAgent -> new ();
$lwp -> cookie_jar (HTTP::Cookies->new ());
$lwp -> agent ('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16');
$lwp -> timeout (60);

my $url = 'http://оптим.рф'; 
print $url ."\n";
my $method = 'GET';

my $req = HTTP::Request -> new (
    $method => $url,
    [
        # 'User-Agent' => $useragent,
        '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',
    ]
);

my $file = '1.html';
my $response = $lwp -> request ($req, $file);

print $response -> code ;




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 21.6.2013, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 49



burakov, если адрес в кодировке cp1251, то добавьте
Код

use encoding 'cp1251';


Надо смотреть $response->status_line() и будет понятнее, в чем проблема  smile 

Это сообщение отредактировал(а) ginnie - 21.6.2013, 17:00


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
burakov
Дата 1.7.2013, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все ж таки.
все было у меня в кодировке utf8.

если воспользоваться модулем
use URI::UTF8::Punycode;
$punycode = puny_enc($utf8str);
$utf8onsv = puny_dec($punycode);  

то все работает., НО..
при кодировании.. он все подряд цепляет. 
конечно хотелось бы, чтобы LWP както на автомате все это сам понимал.

или я что то не так понял?.

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


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 1.7.2013, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 49



Цитата(burakov @  1.7.2013,  12:47 Найти цитируемый пост)
Все ж таки.
все было у меня в кодировке utf8.

Приведенный в первом сообщении код в кодировке utf8? Где это указано?

Добавлено @ 13:02
Цитата(burakov @  1.7.2013,  12:47 Найти цитируемый пост)
но , а если это не только кириллица, а любая национальная ссылка (Домен).
все как то должно быть зашито в модуль "на автомате" чтобы понималось.

Передавайте в модуль ссылки в utf8 и все будет нормально.

Добавлено @ 13:11
burakov, вот пример, кодировка скрипта cp1251:

Код

#!/usr/bin/perl

use Devel::Peek;

use encoding 'cp1251';

my $str = 'http://оптим.рф';

Dump $str;


выдает 

Код

SV = PV(0x80185ce70) at 0x801824ba0
  REFCNT = 1
  FLAGS = (PADMY,POK,pPOK,UTF8)
  PV = 0x8019772a0 "http://\320\276\320\277\321\202\320\270\320\274.\321\200\321\204"\0 [UTF8 "http://\x{43e}\x{43f}\x{442}\x{438}\x{43c}.\x{440}\x{444}"]
  CUR = 22
  LEN = 24


Покажите Ваше значение в utf8, которое вы передаете в LWP и он его некорректно обрабатывает.

Это сообщение отредактировал(а) ginnie - 1.7.2013, 13:12


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
burakov
Дата 1.7.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал так

Код


use strict;
use warnings;
use URI::Escape;

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTTP::Cookies;
use URI::Escape;
use URI;

use encoding 'utf8';  #вот этого у меня не было

our $lwp = undef;
$lwp = LWP::UserAgent -> new ();
$lwp -> cookie_jar (HTTP::Cookies->new ());
$lwp -> agent ('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16');
$lwp -> timeout (60);

my $url = 'http://оптим.рф'; 


my $method = 'GET';

my $req = HTTP::Request -> new (
    $method => $url,
    [
        # 'User-Agent' => $useragent,
        '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',
    ]
);

my $file = '1.html';
my $response = $lwp -> request ($req, $file);

print $response -> code ;




И заработало.

Но возник вопрос.

Скрипт, который пишется -- это  универсальный парсер.
должен отработать на всем подряд (по любым ссылкам)

возможно ли ситуация, когда урлы (к примеру на кириллице) могут быть представлены в хтмл коде (исходнике) в кодировке отличной от UTF8?

просто иначе (если это возможно). 
применение
use encoding 'utf8';
это частный случай. 

или же все таки национальные ссылки всегда представлены в UTF8?
и можно смело пользоваться use encoding 'utf8'?

и можете пояснять. что делает этот use encoding 'utf8'
http://search.cpan.org/~dankogai/Encode-2.51/encoding.pm
я перевел так, что "сообщает перлу в какой кодировке данные, для работы модулей"


smile пардон. за мой французский....
иными словами хочу спросить.

указание 
use encoding 'utf8'
нужно (кроме данного случая со ссылками) еще и для того, чтобы корректно допустим работали регулярные выражения? или к примеру в файл читало/писало). еще раз приношу извинения за некорректно поставленный вопрос... 

часто сталкиваешься с ситуаций, когда идет путаница с этими кодировками , то wite характер, то что то не работает (в основном регулярные выражения). очень хочется за use encoding 'utf8' зацепиться, чтобы используя его , решить раз и навсегда все эти проблемы... smile.

спасибо.



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


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

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


 




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


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

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