次の特徴を持つ SOAP サービスにアクセスしようとしています。 1. 認証なしで WSDL を使用できます。 2. サービスは、https 経由で basic_auth を使用してアクセスできます。リクエスト
SOAPクライアントを構築するための私のコードは次のとおりです。
@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:0x0000000382c5c8@/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)
クライアントの構成が間違っていますか? GET リクエストまたは PoST リクエストで認証ヘッダーが送信されていません。これを機能させるために何かを追加/削除する必要がありますか? あなたの助けをいただければ幸いです。