2013-03-08 2 views
3

Я пытаюсь получить доступ к службе SOAP, который имеет следующие Charateristics: 1. WSDL доступен без аутентификации 2. Услуги доступна по протоколу HTTPS с basic_auth 3. Согласно сервис SOAP, заголовок «Authorization» должен быть включен в каждом запросеСавона 2.1.0 базовой аутентификации не функционирующий

Вот мой код для строительства мыла клиент:

@wsdl="https://example.com/table.do&WSDL" 
@proxy="http://internal.proxy.com:8080" 
@basic_auth=["user","pass"] 
@headers={"Authorization" => "Basic"} 
client = Savon.client do |globals| 
    globals.wsdl @wsdl 
    globals.proxy @proxy 
    globals.basic_auth @basic_auth 
    globals.headers @headers 
end 

Вот client.globals.inspect:

#<Savon::GlobalOptions:0x0000000382c7a8 @options={:encoding=>"UTF-8", 
:soap_version=>1, :namespaces=>{}, :logger=>#<Logger:0x0000000382c730 @progname=nil, 
@level=0, @default_formatter=#<Logger::Formatter:0x0000000382c708 
@datetime_format=nil>, 
@formatter=nil, @logdev=#<Logger::LogDevice:0x0000000382c6b8 @shift_size=nil, 
@shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>, 
@mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000382c690 @mon_owner=nil, 
@mon_count=0, @mon_mutex=#<Mutex:0x0000000382c640>>>>, :log=>true, :filters=>[], 
:pretty_print_xml=>false, :raise_errors=>true, :strip_namespaces=>true, 
:convert_response_tags_to=>#<Proc:[email protected]/usr/local/rvm/gems/ruby-2.0.0-p0/gems/savon-2.1.0/lib/savon/options.rb:48 (lambda)>, 
:wsdl=>"https://example.com/table.do&WSDL", 
:proxy=>"http://internal.proxy.com:8080", 
:basic_auth=>["user", "pass"], 
:headers=>{"Authorization"=>"Basic"}}> 

, когда я называю:

client.call(:get, message: { sys_id: "67d2f77ed9377840c53fc6da9c094635" }) 

Служба возвращается:

DEBUG -- : HTTPI GET request to xseaddev.service-now.com (net_http) 
INFO -- : SOAP request: https://xseaddev.service-now.com/change_task_list.do?displayvalue=all&SOAP 
INFO -- : SOAPAction: "http://www.service-now.com/change_task/get", Content-Type: text/xml;charset=UTF-8, Content-Length: 408 
DEBUG -- : <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.service-now.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://www.service-now.com/change_task"><env:Body><ins0:get><tns:sysId>67d2f77ed9377840c53fc6da9c094635</tns:sysId></ins0:get></env:Body></env:Envelope> 
DEBUG -- : HTTPI POST request to xseaddev.service-now.com (net_http) 
INFO -- : SOAP response (status 401) 

Am я построения клиента неправильно? Я не вижу, чтобы заголовки аутентификации отправлялись по запросам GET или PoST. Нужно ли добавлять/удалять все, чтобы это получилось? Ваша помощь будет оценена по достоинству.

+0

под заголовком «Авторизация», они имеют в виду заголовок HTTP или SOAP? параметр [': headers'] (http://savonrb.com/version2.html#headers) устанавливает заголовок HTTP, а параметр [': soap_header'] (http://savonrb.com/version2.html# soap-header) устанавливает заголовок SOAP. – rubiii

+0

Они означают HTTP-заголовок. – Andrew

+0

@rubiii, любые мысли о том, почему это не работает? – Andrew

ответ

2

Я думаю, вы должны быть в состоянии сделать следующее:

client = Savon.client(endpoint: ENDPOINT, namespace: NAMESPACE, basic_auth: ["user", "password"]) 

(Или же в виде блок-схемы).

Проверить эту страницу под заголовком «Аутентификация»: http://savonrb.com/version2/globals.html

(я делаю то же самое, но с WSDL).

Смежные вопросы