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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по HTTP::Request 
:(
    Опции темы
sPhoenix
Дата 21.11.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



допустим через HTTP::Daemon принимается http-запрос.
методом get_request() его можно представить в виде HTTP::Request

если потом вызвать метод as_string() то вроде как я должен буду получить исходный запрос.
Но дело в том что он довольно таки сильно искажается.
1. В http-заголовке все переносы строки \x0D\x0A преобразуются в \x0A, 
а некоторые сервера отказываются принимать такой запрос.
но исправить заголовок обратно несложно и все работает.

2. Следующая проблема в POST запросе для аплоада файлов. 
запрос изменяется достаточно сильно и никакие веб-сервера его более не принимают,
причем искажается и содержимое файлов. 

есть ли способы как-нибудь изъять весь http-запрос неповрежденным?
заранее спасибо.
PM MAIL WWW   Вверх
tolkien
Дата 22.11.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отправляйте запрос через проксю и смотрите ее логи
PM MAIL   Вверх
sPhoenix
Дата 22.11.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



попытался сравнить POST-запрос (аплоад файла), который возвращает метод as_string() с POST-запросом, полученным через сокеты, но в чем причина различий не обнаружил:
1. то что описывал -  \x0A вместо \x0D\x0A
2. изменен порядок следования строк в HTTP-заголовке 

Тем не менее почему-то запрос, полученый через сокеты и перенаправленный на веб-сервер работает отлично.
Если больше советов не будет наверно оставлю этот способ...
хотя скрипт будет красивее если использовать HTTP::Daemon.

Но теперь у меня возникла другая проблема - как через сокеты оптимальнее всего получать HTTP-запрос?
Я сделал так:
Код

sub RecvHttpRequest()
{
    my $socket = shift;
    my ($buf,$http,$tick);
    my $select = new IO::Select($socket);
    while($tick<3) #Ждать 3 таймаута
    {
        if(defined($select->can_read(0.09)))
        {   
            last if !sysread($socket, $buf, 4096);
            $http.=$buf;
        }else{
            $tick++;
        }
    }
    $select->remove($socket);
    return $http;
}


но мне кажется что это не очень правильно. Что скажете?

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


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

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


 




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


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

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