RPC и https

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
egorbright
OTRS Новобранец
Сообщения: 126
Зарегистрирован: 11 янв 2013, 12:06

RPC и https

Сообщение egorbright » 31 май 2013, 14:42

Здравствуйте, уважаемые.

Дано:
1. FreeBSD 7.4, Apache 2.2, OTRS 3.2.5;
2. OTRS доступен только по https. В conf файле апача прописано правило - редиректить всех с http на https;

Требуется:
1. По мануалу: http://doc.otrs.org/3.2/en/html/genericinterface.html (пример в конце страницы) сделать создание заявки perl скриптом.

Проблема:

Код: Выделить всё

500 Can't connect to servicedesk.prognoz.ru:443 at /usr/local/otrs/bin/otrs.<filename>.pl line 78
Хотя в $URL указан правильный url вида

Код: Выделить всё

https://servicedesk.domain.ru/otrs/nph-genericinterface.pl/WebserviceID/1
Переводить весь OTRS из-за этого на http вместо https - не вариант, т.к. это является одним из главных требований руководства. Необходим нам SSL...

Подскажите, пожалуйста, кто что знает/сталкивался/находил.

Спасибо большое, господа! =)
FreeBSD 7.4 :: OTRS 3.3.11
FreeBSD 9.1 :: OTRS 5

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: RPC и https

Сообщение merkushov » 31 май 2013, 16:04

Могу ошибаться, но мне кажется, что 500ю ошибку в этом случае выдаёт web-сервер. В приложении генерации 500й не встречал.

Опишите как пользуетесь web-сервисами, тогда можно будет что-то посоветовать.
Меркушов Виктор, perl программист

egorbright
OTRS Новобранец
Сообщения: 126
Зарегистрирован: 11 янв 2013, 12:06

Re: RPC и https

Сообщение egorbright » 01 июн 2013, 11:57

Содрал кусок кода из мануала, подставив свои значения.

Код: Выделить всё

use strict;
use warnings;

use File::Basename;
use FindBin qw($RealBin);
use lib dirname($RealBin);

use SOAP::Lite;
use Data::Dumper;

# --
# Variables to be defined.

# this is the URL for the web service
# the format is
# <HTTP_TYPE>:://<OTRS_FQDN>/nph-genericinterface.pl/Webservice/<WEB_SERVICE_NAME>
# or
# <HTTP_TYPE>:://<OTRS_FQDN>/nph-genericinterface.pl/WebserviceID/<WEB_SERVICE_ID>

my $URL = 'https://servicedesk.domain.ru/otrs/nph-genericinterface.pl/WebserviceID/1';

# this name space should match the specified name space in the SOAP transport for the web service.
my $NameSpace = 'Core';

# this is operation to execute, it could be TicketCreate, TicketUpdate, TicketGet, TicketSearch
# or SessionCreate. and they must to be defined in the web service.
my $Operation = 'TicketCreate';

# this variable is used to store all the parameters to be included on a request in XML format. Each
# operation has a determined set of mandatory and non mandatory parameters to work correctly. Please
# check the OTRS Admin Manual in order to get a complete list of parameters.

my $XMLData = '
        <UserLogin>userlogin (указанный в настройках SOAP)</UserLogin>
        <Password>pass (указанный в настройках SOAP)</Password>
        <Ticket>
                <Title>Maintenance ticket</Title>
                <CustomerUser>mtg</CustomerUser>
                <Queue>Maintenance</Queue>
                <State>new</State>
                <Priority>4 high</Priority>
        </Ticket>
        <Article>
                <Subject>New maintenance ticket was created!</Subject>
                <Body><p>Hi there!</p><p>There are new maintenance tickets in Maintenance queue!</p></Body>
                <ContentType>text/html; charset=utf8</ContentType>
        </Article>
';

# --

# create a SOAP::Lite data structure from the provided XML data structure.
my $SOAPData = SOAP::Data->type( 'xml' => $XMLData );

my $SOAPObject = SOAP::Lite->uri($NameSpace)->proxy($URL)->$Operation($SOAPData);

# check for a fault in the SOAP code.

if ( $SOAPObject->fault ) {
        print $SOAPObject->faultcode, " blah ", $SOAPObject->faultstring, "\n";
} else {
        # print the results

        # get the XML response part from the SOAP message.
        my $XMLResponse = $SOAPObject->context()->transport()->proxy()->http_response()->content();

        # deserialize response (convert it into the perl structure)
        my $Deserialized = eval {
                SOAP::Deserealizer->deserialize($XMLResponse);
        };

        # remove all the headers and other not needed parts of the SOAP message.
        my $Body = $Deserialized->body();

        # just output relevant data and no the operation name key (like TicketCreateResponse).
        for my $ResponseKey ( keys %{$Body} ) {
                print Dumper( $Body->{$ResponseKey} );
        }
}
Вообще, у меня задача следующая: ежедневно, еженедельно, ежемесячно создавать заявки на проведение регламентных работ. Например, на проведение проверки работоспособности UPS в серверных.

500 ошибку выдает апач, всё верно. Буду рыть в его сторону пока.
FreeBSD 7.4 :: OTRS 3.3.11
FreeBSD 9.1 :: OTRS 5

egorbright
OTRS Новобранец
Сообщения: 126
Зарегистрирован: 11 янв 2013, 12:06

Re: RPC и https

Сообщение egorbright » 01 июн 2013, 13:31

В общем, с SSL так и не разобрался. В апаче создал еще один VirtualHost на левом порту (8090), теперь ко всем вебсервисам обращаюсь по http. Проблема решена.
Все спасибо. =)
FreeBSD 7.4 :: OTRS 3.3.11
FreeBSD 9.1 :: OTRS 5

Ответить