我已将sas存储过程部署为Web服务。我希望在python中看到存储过程的输出。 如果有人可以帮助我,我真的很感激。
这是我使用的过程 -
创建的网络服务是 - ' https://sasdev.wdw.disney.com:443/SASBIWS/services/abcweb.wsdl'
我认为,它将存储过程存储在一个函数中,这里是abc_web()
我在这里使用的python代码是 -
`import urllib 导入日志记录 来自suds.client import Client
来自suds.wsse import * 的导入请求
import suds_requests
url =' https://sasdev.wdw.disney.com:443/SASBIWS/services/abcweb.wsdl' namespace =' https://sasdev.wdw.disney.com:443/SASBIWS/services'
客户端=客户端(网址) client.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:服务器引发的错误:&#39;客户端身份验证&#39;执行&#39; abcweb&#39;期间发生的异常类型服务。例外情况如下:没有可用的安全上下文。&#39;
答案 0 :(得分:1)
错误代码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
首先,看看您是否可以使用正确的身份验证在SoapUI中设置此WS。 见下图。在SoapUI中,单击您的SOAP请求,然后转到下面的属性,您需要输入domain \ userid和密码。 SAS支持加密,但假设它启用了基本身份验证,您可以将其保留为纯文本。
您应该能够在SoapUI中运行SOAP请求。
实际上,它将在标准SOAP中添加一个HEAD标记,下面是这些行。您可以在SOAP UI中看到何时打开SOAP日志:
<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中。
答案 1 :(得分:1)
我使用以下脚本使用auth成功连接到SAS Web Services:
需要自定义用户名和密码。
public function myfunction(Request $request) {
if(!empty($request->EX1) && !empty($request->EX2)){
$Email = $request->EX1;
$Password = $request->EX2;
$userDetails = DB::table('applicants')
->where('Email', '=', $Email)
->where('Password','=', $Password)
->get();
if($Email == $userDetails[0]->Email && $Password == $userDetails[0]->Password){
return 'Both are the same ';
}else{
return 'Not the same';
}
} else {
return 'error';
}
}
希望这有助于解决SASWebServices的身份验证问题。