2013-03-08 1 views
3

SOAP 서비스에 액세스하려고합니다. 인증없이 WSDL을 사용할 수 있습니다. 2.이 서비스는 https에서 basic_auth를 통해 액세스 할 수 있습니다. 3. SOAP 서비스는 "인증"헤더는 건설 내 코드가 비누 클라이언트입니다 모든 요청 여기Savon 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"}}> 

(3210)는 내가 전화 할 때 :

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) 

내가 잘못 클라이언트를 구성하는 건가요? GET 또는 PoST 요청시 인증 헤더가 전송되지 않습니다. 이 기능을 사용하려면 아무것도 추가/제거해야합니까? 귀하의 도움을 주시면 감사하겠습니다.

+0

"Authorization"헤더가 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과, 같은 일을하고있다).