Perl SOAP :: WSDL обращается к HTTPS Неразрешенная ошибка - PullRequest
6 голосов
/ 21 октября 2011

Я пытаюсь создать библиотеку Perl для подключения к WebService. Этот веб-сервис находится на HTTPS-сервере, и мой пользователь имеет к нему доступ.

Я выполнил wsdl2perl.pl несколько раз, с разными параметрами, и он всегда завершается ошибкой с сообщением: Unauthorized at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 73. Дело в том, что когда я не даю свой пользователь / пароль в качестве аргументов, он даже не просит их.

Я прочитал [SOAP :: WSDL :: Manual :: Cookbook] (http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/Cookbook.pod) и сделал то, что он говорит о HTTPS: Crypt :: SSLeay установлен, и оба SOAP :: WSDL :: Transport :: HTTP и SOAP :: Transport :: HTTP изменены.

Можете ли вы дать намек на то, что может пойти не так?

Ответы [ 4 ]

0 голосов
/ 02 февраля 2017

Сообщение об ошибке, которое вы цитируете, похоже на эту строку: die $response->message() if $response->code() ne '200'; а в мире HTTP Unauthorized - это явно код ошибки 401, что означает, что ваш веб-сайт запрашивает имя пользователя и пароль (наиболее вероятно, что какой-то веб-сайт может «перехватить» этот код ошибки, чтобы удовлетворить другие условия, такие как фильтр исходного IP) , У вас есть они?

Если это так, вы можете

  • после запуска wdsl2perl найдите в созданных файлах, где вызывается set_proxy(), и измените там URL-адрес, включив в него имя пользователя и пароль: ...->set_proxy('http://USERNAME:PASSWORD@www.example.com/...')
  • или ваш код после создания экземпляра объекта SOAP::WSDL, вызовите для него service(SERVICENAME) (для каждой службы, которую вы определили в файле WSDL), что даст вам новый объект, для которого вы вызываете transport() для получить доступ к базовому транспортному объекту, для которого вы можете вызвать proxy() с URL-адресом, как отформатировано выше (да, это proxy() здесь и set_proxy() выше); или вы звоните credentials() вместо proxy() и передаете 4 строки:
    1. HOSTNAME: PORT '
    2. царство, данное веб-сервером, но я думаю, что вы можете поставить что угодно
    3. имя пользователя
    4. пароль
0 голосов
/ 31 августа 2013

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

Итак, если вам нужно использовать wsdl2perl, вы можете использовать komodo, чтобы перейти к коду, чтобы выяснить, что произошло. Это то, что я делал, когда использовал perl в качестве клиента веб-службы. https - это SSL, поэтому, если ваш SSL основан на авторизованном сертификате, вы должны настроить путь сертификата и список сертификатов доверенного сервера. Для тестирования лучше использовать Firefox на основе Linux. Как я знаю , вы можете настроить путь сертификата firefox и список доверенных сертификатов firefox. Если firefox может успешно обмениваться данными с сервером веб-службы, то пришло время отладить ваш Perl-клиент.

0 голосов
/ 27 октября 2016

Для отладки ситуаций с Perl и SOAP вставьте веб-прокси, чтобы вы могли точно видеть, какие данные передаются и какой ответ возвращается с сервера.Я ожидаю, что вы получаете 401 Не авторизовано, но в ответе сервера может быть больше деталей.

И Fiddler http://docs.telerik.com/fiddler, и прокси-сервер Charles https://www.charlesproxy.com/ могут это сделать.

0 голосов
/ 28 мая 2013

Можете ли вы свободно получить доступ к файлу WSDL из веб-браузера?Может ли кто-то другой в вашей сети получить к нему доступ без проблем?

Может быть, веб-серверу, на котором размещен файл WSDL, требуется обычная или какая-либо другая аутентификация ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...