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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTTP::Lite, with XML content 
:(
    Опции темы
Bulat
Дата 11.7.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Код

use HTTP::Lite;
my $http = new HTTP::Lite;

my $XMLRequest = '<myxml>...</myxml>';

my %vars = (
  $XMLRequest
);

$http -> prepare_post(\%vars);

my $req = $http -> request("http://myURL");
....


При отправке запроса с помощью данного модуля, если крепить в контент(в форму) XML, до сервера XML доходит не в самом хорошем состоянии. Т.е. сам http - 200.

Пробовал отправлять с помощью LWp::UserAgent - все гуд.

Мож, кто сталкивался?? Мож проблема стандартная, и я чего-то недоделываю??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
KSURi
Дата 11.7.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При использовании
Код

use strict;
use warnings;

по идее должна выскочить ошибка об odd number elements in hash assigment. Примерно так:
Код

my %vars = (post_parameter_name => $xml)



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tolkien
Дата 12.7.2008, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Конечно стандартная. Не понимание работы c http протоколом. И тут не важно какой модуль вы используете и что отправляете.
PM MAIL   Вверх
Bulat
Дата 14.7.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



tolkien, Давай не будем громко кричать. Мне приходилось не только сайты и порталы, но и ботов писать. Так что что такое http-протокол я знаю не по наслышке. А от модуля многое зависит. То, что писал KSURi, проблему не решило, я уже и до так пытался. 

tolkien, А для особо умных, ошибка не http, а в том, что контент на том конце приходит не верный.

Немогу выложить полностью все, но вот часть

Код

<myxml.request>
  <hash>myhash</hash>
  ...
</myxml.request>


И вот в ответе приходит, что параметр внутри тега hash не верен, само содержание, текст, а не форма. smile 

Или если еще проще, я могу расписать как 
Код

my %vars = (post_parameter_name => $xml)


или

Код

my %vars = (content => $xml)


или еще как, но это не решает проблему smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
KSURi
Дата 14.7.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Т.е. на стороне сервера есть проверка формата входных данных? Может тогда стоит на нее обратить внимание?

Цитата(Bulat @  14.7.2008,  09:27 Найти цитируемый пост)
То, что писал KSURi, проблему не решило, я уже и до так пытался. 

Ну во всяком случае, возможно это является частью проблемы.
Посмотрите сами: вы присваиваете хэшу одну переменную, хотя хэш должен иметь вид ключ=>значение. Т.е. получается, что ваш XML будет использоваться в кач-ве ключа, а в кач-ве его значения скорее всего будет undef. Из этого вытекает, что вы посылаете неверный POST запрос (я лично не работал с HTTP::Lite, но предполагаю, что метод prepare_post ждет на вход ссылку на хэш вида POST_param_name=>POST_param_value).

Это сообщение отредактировал(а) KSURi - 14.7.2008, 12:35


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tolkien
Дата 14.7.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat
Ну раз вы такой умный. Может сами додумаетесь через проксю послать запрос первый который у вас работает с помощью LWP и второй с помощью HTTP::Lite. И посмотреть в чем различие.
PM MAIL   Вверх
Bulat
Дата 14.7.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Цитата(KSURi @  14.7.2008,  12:34 Найти цитируемый пост)
Ну во всяком случае, возможно это является частью проблемы.
Посмотрите сами: вы присваиваете хэшу одну переменную, хотя хэш должен иметь вид ключ=>значение. Т.е. получается, что ваш XML будет использоваться в кач-ве ключа, а в кач-ве его значения скорее всего будет undef. Из этого вытекает, что вы посылаете неверный POST запрос (я лично не работал с HTTP::Lite, но предполагаю, что метод prepare_post ждет на вход ссылку на хэш вида POST_param_name=>POST_param_value).


В том же пакете есть дополнительные методы, можно отловить все что отправляется, записать в файл(или на крайняк в STDOUT) и смотреть.

Контент, так как я его крепил, тоже крепится куда надо. 

Вот я тоже с HTTP::Lite никогда не работал, а приходится smile

Цитата(KSURi @  14.7.2008,  12:34 Найти цитируемый пост)
Т.е. на стороне сервера есть проверка формата входных данных? Может тогда стоит на нее обратить внимание?


Не доступно. Все что у меня есть и все что могу просмотреть, это лишь моя сторона smile

Цитата(tolkien @  14.7.2008,  12:47 Найти цитируемый пост)
Ну раз вы такой умный. Может сами додумаетесь через проксю послать запрос первый который у вас работает с помощью LWP и второй с помощью HTTP::Lite. И посмотреть в чем различие. 

Млин..... Я не знаю где ты работаешь, может быть у вас там каждому всюду и везде есть доступ, у нас такого нет. И чтобы что-то проделать выходящее за рамки твоих полномочий(проще говоря на что есть права), нужно напрячь пару-тройку людей, и потратить не только свое но и их драгоценное время, а работы у всех хватает. А учитывая что результат есть, но иным методом, этим вообще никто заниматься не будет. Тем более я сомневаюсь, что это что-то даст. Если уж и смотреть, то на стороне сервера, в момент того, когда xml парсится, а это вообще не доступно smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
KSURi
Дата 15.7.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat, не хочу показаться настырным, но все-таки в 3й раз обращу ваше внимание, на ИМХО неправильное составление запроса)
Пример из документации HTTP::Lite:
Код

    $http = new HTTP::Lite;
    %vars = (
             "QRY" => "perl",
             "ST" => "MS",
             "svcclass" => "dncurrent",
             "DBS" => "2"
            );
    $http->prepare_post(\%vars);

Обратите внимание, как задаются данные в хэше %vars и как они задаются у вас. Я все-таки не понимаю, как можно посылать значение вместо ключа и ожидать корректной обработки такой ситуации со стороны сервера...
Для пущей убедительности поставил себе HTTP::Lite:
Код

C:\>perl -MData::Dumper -MHTTP::Lite -e"$_=new HTTP::Lite;$_->prepare_post({xml_
here});print Dumper $_"
$VAR1 = bless( {
                 'headers' => {
                                'user-agent' => 'HTTP::Lite/2.1.6',
                                'Content-Type' => 'application/x-www-form-urlenc
oded'
                              },
                 'error-message' => undef,
                 'HTTP11' => 0,
                 'status' => undef,
                 'content' => 'xml_here=',
                 'resp-protocol' => undef,
                 'body' => undef,
                 'timeout' => 120,
                 'HTTPReadBuffer' => '',
                 'callback_params' => undef,
                 'callback_function' => undef,
                 'method' => 'POST',
                 'DEBUG' => 0,
                 'request' => undef,
                 'resp-headers' => undef,
                 'header_at_once' => 0,
                 'CBARGS' => undef,
                 'headermap' => {
                                  'user-agent' => 'User-Agent'
                                },
                 'holdback' => 0,
                 'proxyport' => undef,
                 'proxy' => undef
               }, 'HTTP::Lite' );

C:\>

обратите внимание на ключ content и его значение


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tolkien
Дата 15.7.2008, 04:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat
Вы так и не поняли. Дальше вашей машины смотреть ничего не надо. Может у вас нет полных прав на машине на которой вы прогамите? 
PM MAIL   Вверх
Bulat
Дата 15.7.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Цитата(KSURi @  15.7.2008,  00:45 Найти цитируемый пост)
Обратите внимание, как задаются данные в хэше %vars и как они задаются у вас. Я все-таки не понимаю, как можно посылать значение вместо ключа и ожидать корректной обработки такой ситуации со стороны сервера...
Для пущей убедительности поставил себе HTTP::Lite:


Проблема заключается не в этом. smile Вообще насколько я успел заметить, есть большое подозрение в том как данный модуль эскейпит контент составленный из xml. smile



--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
KSURi
Дата 15.7.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bulat, приведите код с LWP::UA, который успешно отрабатывает


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Itsys
Дата 15.7.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile 

Как там в пословице, один дурак 7 мудрецов в тупик поставить может (не ручаюсь за правильность цитаты), если человек не хочет понимать, что ему говорят, и считает, что он умнее всех, кто ему хочет помочь, то мне кажется, все усилия будут бессмысленны.
PM MAIL WWW Skype   Вверх
Bulat
Дата 15.7.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



KSURi, 

Откапал я лог, пару дней давности. Тогда еще не очень обратил внимание, очень интересно эскейпится сам xml, мои подозрения оправдываются smile (По понятным причинам, некоторые данные пришлось изменить на 'my' smile)

Вот что делает с xml модуль HTTP::Lite, после того как крепишь его в контент

Код

...
$VAR1 = [
          'content-done',
          undef,
          bless( {
                   'headers' => {
                                  'user-agent' => 'HTTP::Lite/2.1.6',
                                  'connection' => 'close',
                                  'accept' => '*/*',
                                  'Content-Type' => 'application/x-www-form-urlencoded',
                                  'host' => 'my.ru'
                                },
                   'error-message' => undef,
                   'HTTP11' => 0,
                   'status' => undef,
                   'content' => '%3Cmyxml%3E%3Chash%3Ea06efeb7584466917bf31b37269%3C%2Fhash%3E%3Cdate_begin%3E20080501%3C%2Fdate_begin%3E%3Cdate_end%3E20080731%3C%2Fdate_end%3E%3C%2Fmyxml%3E=',
                   'resp-protocol' => undef,
                   'body' => undef,
                   'timeout' => 120,
                   'HTTPReadBuffer' => '',
                   'callback_params' => [
                                          \*{'::$handle'}
                                        ],
                   'callback_function' => sub { "DUMMY" },
                   'method' => 'POST',
                   'DEBUG' => 0,
                   'request' => undef,
                   'resp-headers' => undef,
                   'header_at_once' => 0,
                   'CBARGS' => undef,
                   'headermap' => {
                                    'user-agent' => 'User-Agent',
                                    'connection' => 'Connection',
                                    'accept' => 'Accept',
                                    'host' => 'Host'
                                  },
                   'holdback' => 0,
                   'proxyport' => undef,
                   'proxy' => undef
                 }, 'HTTP::Lite' )
        ];

$VAR1 = [
          'data',
          \'<?xml version="1.0" encoding="windows-1251"?><myxml>
<retval>-1</retval>
<retdesc>отсутствует или неверно задан параметр hash</retdesc>
</myxml>',
          bless( {
                   'headers' => {
                                  'user-agent' => 'HTTP::Lite/2.1.6',
                                  'connection' => 'close',
                                  'accept' => '*/*',
                                  'Content-Type' => 'application/x-www-form-urlencoded',
                                  'host' => 'my.ru'
                                },
                   'error-message' => 'OK
',
                   'HTTP11' => 0,
                   'status' => '200',
                   'content' => '%3Cmyxml%3E%3Chash%3Ea06efeb7584466917bf31b37269%3C%2Fhash%3E%3Cdate_begin%3E20080501%3C%2Fdate_begin%3E%3Cdate_end%3E20080731%3C%2Fdate_end%3E%3C%2Fmyxml%3E=',
                   'resp-protocol' => 'HTTP/1.0',
                   'body' => undef,
                   'timeout' => 120,
                   'HTTPReadBuffer' => '',
                   'callback_params' => [
                                          \*{'::$handle'}
                                        ],
                   'callback_function' => sub { "DUMMY" },
                   'method' => 'POST',
                   'DEBUG' => 0,
                   'request' => undef,
                   'resp-headers' => {
                                       'Server' => [
                                                     'Microsoft-IIS/6.0'
                                                   ],
                                       'Proxy-Connection' => [
                                                               'close'
                                                             ],
                                       'Via' => [
                                                  '1.0 litr.internal.gate (squid/3.0.STABLE4)'
                                                ],
                                       'X-Powered-By' => [
                                                           'ASP.NET'
                                                         ],
                                       'Date' => [
                                                   'Wed, 09 Jul 2008 11:10:54 GMT'
                                                 ],
                                       'Content-Length' => [
                                                             '175'
                                                           ],
                                       'Cache-Control' => [
                                                            'private'
                                                          ],
                                       'Content-Type' => [
                                                           'text/xml; charset=windows-1251'
                                                         ],
                                       'Set-Cookie' => [
                                                         'ASPSESSIONIDCQQBSBCS=MNHAJKPBHAHPCJJLHCMOKHEG; path=/'
                                                       ],
                                       'X-Cache' => [
                                                      'MISS from my.internal.gate'
                                                    ],
                                       'Expires' => [
                                                      'Wed, 09 Jul 2008 11:10:54 GMT'
                                                    ]
                                     },
                   'header_at_once' => 0,
                   'CBARGS' => undef,
                   'headermap' => {
                                    'user-agent' => 'User-Agent',
                                    'connection' => 'Connection',
                                    'accept' => 'Accept',
                                    'host' => 'Host'
                                  },
                   'holdback' => 0,
                   'proxyport' => undef,
                   'proxy' => undef
                 }, 'HTTP::Lite' )
        ];

$VAR1 = [
          'done',
          undef,
          bless( {
                   'headers' => {
                                  'user-agent' => 'HTTP::Lite/2.1.6',
                                  'connection' => 'close',
                                  'accept' => '*/*',
                                  'Content-Type' => 'application/x-www-form-urlencoded',
                                  'host' => 'my.ru'
                                },
                   'error-message' => 'OK
',
                   'HTTP11' => 0,
                   'status' => '200',
                   'content' => '%3Cmyxml%3E%3Chash%3Ea06efeb7584466917bf31b37269%3C%2Fhash%3E%3Cdate_begin%3E20080501%3C%2Fdate_begin%3E%3Cdate_end%3E20080731%3C%2Fdate_end%3E%3C%2Fmyxml%3E=',
                   'resp-protocol' => 'HTTP/1.0',
                   'body' => undef,
                   'timeout' => 120,
                   'HTTPReadBuffer' => '',
                   'callback_params' => [
                                          \*{'::$handle'}
                                        ],
                   'callback_function' => sub { "DUMMY" },
                   'method' => 'POST',
                   'DEBUG' => 0,
                   'request' => undef,
                   'resp-headers' => {
                                       'Server' => [
                                                     'Microsoft-IIS/6.0'
                                                   ],
                                       'Proxy-Connection' => [
                                                               'close'
                                                             ],
                                       'Via' => [
                                                  '1.0 my.internal.gate (squid/3.0.STABLE4)'
                                                ],
                                       'X-Powered-By' => [
                                                           'ASP.NET'
                                                         ],
                                       'Date' => [
                                                   'Wed, 09 Jul 2008 11:10:54 GMT'
                                                 ],
                                       'Content-Length' => [
                                                             '175'
                                                           ],
                                       'Cache-Control' => [
                                                            'private'
                                                          ],
                                       'Content-Type' => [
                                                           'text/xml; charset=windows-1251'
                                                         ],
                                       'Set-Cookie' => [
                                                         'ASPSESSIONIDCQQBSBCS=MNHAJKPBHAHPCJJLHCMOKHEG; path=/'
                                                       ],
                                       'X-Cache' => [
                                                      'MISS from my.internal.gate'
                                                    ],
                                       'Expires' => [
                                                      'Wed, 09 Jul 2008 11:10:54 GMT'
                                                    ]
                                     },
                   'header_at_once' => 0,
                   'CBARGS' => undef,
                   'headermap' => {
                                    'user-agent' => 'User-Agent',
                                    'connection' => 'Connection',
                                    'accept' => 'Accept',
                                    'host' => 'Host'
                                  },
                   'holdback' => 0,
                   'proxyport' => undef,
                   'proxy' => undef
                 }, 'HTTP::Lite' )
        ];



С LWP::UA XML остается в том же виде:

Код

<myxml>
  <hash>myhash</hash>
  <date_begin>DateBegin</date_begin>
  <date_end>DateEnd</date_end>
</myxml>




--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tolkien
Дата 16.7.2008, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема скорее всего в том что в одном случаи у вас параметр запроса кодируются, в другом нет. Соотвественно на стороне сервера обрабатывается только один случай. Если LWP ничего не кодирует значит этот случаи и обрабатывает сервак. И тут как выше я писал дело не модулях, а в знании протокола http.
PM MAIL   Вверх
Bulat
Дата 16.7.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



tolkien, мне надоело твое ничем не подкрепленное хваствоство. Если бы ты действительно знал о протоколе http, то ты должен был бы знать, что эскейпится должно в любом случае. Так как изначально, неизвестно что будет передаваться по протоколу. Возможно, это символы из кириллицы, возможно еще что-то. Нет такого - эскейпится, не эскейпится, есть только правильно эскейпится и не правильно эскейпится.

Ты бы побольше писал, а н е пустословил. smile


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


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

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


 




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


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

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