通过python suds在Web服务链接中调用SAS Stored Process

时间:2016-03-02 02:48:55

标签: python web-services soap wsdl sas

我已将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;

2 个答案:

答案 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中。

enter image description here

答案 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的身份验证问题。