2016-03-02 88 views
0

我已經將sas存儲過程作爲Web服務部署。我想在python中看到存儲過程的輸出。 我真的很感激,如果有人可以幫助我一樣。通過python泡沫在Web服務鏈接中調用SAS存儲過程

這是我用過的過程 -

創建的Web服務是 - 「https://sasdev.wdw.disney.com:443/SASBIWS/services/abcweb.wsdl

我認爲,它存儲在存儲過程中的功能在這裏是abc_web()

我在這裏使用的python代碼是 -

`import urllib 從suds.client導入日誌記錄 import客戶端

從suds.wsse進口*

導入請求

進口suds_requests

URL = 'https://sasdev.wdw.disney.com:443/SASBIWS/services/abcweb.wsdl' 命名空間= 'https://sasdev.wdw.disney.com:443/SASBIWS/services'

客戶端=客戶端(URL) 客戶端。 service.abc_web()`

但它收到錯誤:

`

ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?> 
    <SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/abcweb"  xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <ns1:Body> 
     <ns0:abc_web/> 
    </ns1:Body> 
    </SOAP-ENV:Envelope>` 

WebFault此類:服務器提出故障:「A '客戶端身份驗證abcweb '服務' 類型的異常的執行過程中發生'。例外情況如下:沒有安全上下文可用。

+0

你的URL不是外部的。它看起來像只設置了內部訪問。你如何在python中將用戶憑據傳遞給你的WS?例如,你能夠從SoapUI連接到你的WS嗎? –

+0

當我嘗試使用SOAPUI對其進行測試時,我收到錯誤信息 - 'A'客戶端身份驗證'類型的異常在執行'abcweb'服務期間發生。例外情況如下:沒有安全上下文可用。 錯誤代碼:1000 – jinsi

+0

嘿@Jinsi,您目前如何將證書傳遞給WS如果是的話? –

回答

0

錯誤代碼1000手段:Specifies an invalid user name or password (the client application might want to re-prompt the user for credentials).來源:http://support.sas.com/documentation/cdl/en/wbsvcdg/61496/HTML/default/viewer.htm#a003275627.htm

首先,看你能不能設置此WS在了SoapUI與正確的身份驗證。 看到下面的圖片。在SoapUI中,點擊您的SOAP請求,然後轉到您需要輸入域\用戶名和密碼的以下屬性。 SAS支持加密,但假設它已啓用基本身份驗證,則可以將其保留爲純文本。

您應該可以在SoapUI中運行您的SOAP請求。

實際上,它將添加到標準的SOAP信封頭部標籤下面的這些行。你可以看到,當您打開SOAP登錄SOAP UI:

<soapenv:Header><wsse:Security soapenv:mustUnderstand="1" 
xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 
xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd> 
<wsse:UsernameToken wsu:Id=""> 
<wsse:Username>domain\username</wsse:Username> 
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password> 
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"></wsse:Nonce> 
<wsu:Created>2014-10-22T15:10:21.866Z</wsu:Created></wsse:UsernameToken></wsse:Security></soapenv:Header> 

讓我在這裏認識你上車。很抱歉,我可以用Python直接幫助你,但是如果你能在SoapUI中工作,那麼你可以在SoapIU和你的Python客戶端之間比較SOAP請求,看看Python的錯誤。

P.S.如果您不喜歡在SoapUI中輸入純文本密碼,則可以使用PROC PWENCODE先加密密碼,然後將其複製粘貼到SoapUI中。

enter image description here

+0

不要打擾PWENCODE ...編碼值可以用來獲取訪問權限,所以它只是給人一種錯誤的安全感。 –

+0

編碼值可以訪問SAS,這是真的。但是,如果SAS平臺使用AD身份驗證,那麼非編碼值將允許訪問工作站,服務器,郵件以及任何其他也使用AD的東西。所以它仍然將安全風險降到最低,當然不會消除它。 –

+0

公平點。我只是感到沮喪,SAS仍然沒有提供一種將純文本密碼保存在代碼之外的安全方式。 –

0

我用下面的腳本succefully連接到SAS的Web服務,身份驗證:

用戶名和密碼,需要進行定製。

from cred import username, password 
from suds.client import Client 
from suds.wsse import * 


security = Security() 
token = UsernameToken(username, password) 
security.tokens.append(token) 


url = 'http://srv/SASBIWS/services/folder/add?WSDL' 


client = Client(url = url) 
client.set_options(wsse=security) 

print client 

params = client.factory.create('addParameters') 

params.num1 = 32452352 
params.num2 = 34 



print params 
print client.service.add(params) 

希望這有助於解決認證問題SASWebServices。

相關問題