【发布时间】:2019-08-24 09:35:50
【问题描述】:
我将 USERID 传递给我认为是 SOAP 请求的内容。我从来没有使用过 SOAP,也不太清楚从哪里开始,所以如果我的问题不太合理,请告诉我,我会尝试填写缺失的细节。
问题的上下文: 我正在转换一个 excel 宏(该宏将查询将用户 ID 传递给服务器,服务器将返回员工详细信息,例如姓名、电子邮件、地址等)并转换为 Web 查找。
我有以下代码:
<cfscript>
variables.sso = '55555';
variables.serverURL = "http://search.corporate.ge.com/ldq/Query";
variables.queryString = "?serverID=ssoprod&searchBase=ou=domainWorker,+o=domain.com&Prebuilt=true&scope=2&filter=(domainoraclehrid=#variables.sso#)";
variables.webservice = "#variables.serverURL##variables.queryString#";
</cfscript>
<cfdump var="#variables.webservice#">
<cfhttp url="#variables.webservice#" method="get" result="response"></cfhttp>
<cfdump var="#response.fileContent#" label="soap content">
当我从 variables.webservice 的转储中获取值并将其直接粘贴到浏览器中时,我得到以下信息(假设用户 ID 为 55555):
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dsml="http://www.dsml.org/DSML">
<SOAP-ENV:Body>
<dsml:dsml xmlns:dsml="http://www.dsml.org/DSML">
<dsml:directory-entries>
<dsml:entry dn="domainssouid=1D8B0D04-91F0-1CAE-9BD7-002128B20D70,ou=domainWorker, o=domain.com">
...
<dsml:attr name="employeetype">
<dsml:value>Contractor</dsml:value>
</dsml:attr>
<dsml:attr name="givenname">
<dsml:value>John</dsml:value>
</dsml:attr>
<dsml:attr name="postalcode">
<dsml:value>90210</dsml:value>
</dsml:attr>
<dsml:attr name="domainoraclehrid">
<dsml:value>456456987</dsml:value>
</dsml:attr>
<dsml:attr name="mail">
<dsml:value>John.Doe@domain.com</dsml:value>
</dsml:attr>
<dsml:attr name="cn">
<dsml:value>Doe, John</dsml:value>
</dsml:attr>
...
</dsml:entry>
</dsml:directory-entries>
</dsml:dsml>
</SOAP-ENV:Body>
但是当我转储#response.fileContent# 时,我得到了一些不同的东西,我得到了:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f="http://www.w3.org/2001/06/soap-faults">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<SOAP-ENV:faultcode>MustUnderstand</SOAP-ENV:faultcode>
<SOAP-ENV:faultstring>ou=domainWorker,+o=domain.com: [LDAP: error code 34 - Invalid DN], Name Not valid - ou=domainWorker,+o=domain.com - filter -(domainoraclehrid=55555) </SOAP-ENV:faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
最终我想做的是解析出“cn”和“mail”的详细信息。我在这里想念什么?我怀疑这可能与我直接访问 URL(登录用户)有关,因为请求是从服务器发出的并且没有“经过身份验证”。如果是这种情况,我该如何解决?
【问题讨论】:
-
如你所说,可能是身份验证。如果您在私人窗口中尝试它是否有效?也可能是 url 参数编码的问题,或者浏览器发送的不同标头。使用浏览器的 Web 控制台查看成功请求所发送的内容。此外,对于笑容,请尝试将 + 替换为空格。
-
当我用 [空格] 替换 + 时,空格被 URL 编码为 %20 并返回相同的结果(良好的结果)。
-
抱歉,对于最后一部分,我的意思是在 cfhttp 调用中将
+更改为空格。剩下的就是在您的浏览器中调查的内容(使用私人标签,查看 Web 控制台标题、url 参数等)。即找出浏览器调用的不同之处以及它成功的原因。 -
如果你把你的评论放在那里,我的意思是去掉+,我可以把它标记为答案。 :) 我能够解析 XML 树并获得我需要的数据。
-
我假设您的意思是名为“mail”的属性?如果响应只有一个具有该名称的属性,则相对搜索应该可以工作
xmlSearch(doc, "//dsml:attr[@name='mail']")。如果没有,最好打开一个新线程,以便下一个人更容易找到 xml 问题。
标签: web-services soap coldfusion lucee