我试图从存储过程中的API内部获取结果,但结果为null。我不能代表实际的调用,因为它包含敏感信息,但它有这样的逻辑:
EXEC @hResult = sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Select @hResult as Create1 --@hResult=0 --> Create OK
EXEC @hResult = sp_OAMethod @Object, 'open', NULL, 'get',@WebAPI,'false'
Select @hResult as Get1 --@hResult=0 --> GET OK
EXEC @hResult = sp_OAMethod @Object, 'send'
Select @hResult as SEND1 --@hResult=0 --> SEND OK
declare @XML table(yourXML XML) INSERT @xml ( yourXML )
EXEC @hResult = sp_OAGetProperty @Object, 'responseXML.xml'
Select @hResult as Response1 --@hResult=0 --> Response OK
Select * from @XML
我在SQL服务器外测试了查询,它运行正常。我从SQL服务器调用了一个虚拟API('https://www.mocky.io/v2/5185415ba171ea3a00704eed'),结果没问题。
由于输出很长,我试图将结果存储到表或XML变量中,但结果仍为空。
API将返回JSON或XML。例如,结果集将是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<route code="200" message="OKs">
<cross_seca>false</cross_seca>
<total_distance>14417.8587</total_distance>
<total_seca_distance>0.0</total_seca_distance>
<section>
<from_port seca_port="true">CORINTH</from_port>
<to_port seca_port="false">PUSAN</to_port>
<distance>14417.8587</distance>
<distance_seca>0.0</distance_seca>
<waypoint lat="37.9333000183105" lon="22.9500007629395" name="CORINTH" seca="false"/>
<waypoint lat="37.9612731933594" lon="22.9347362518311" seca="false"/>
<waypoint lat="38.0481071472168" lon="22.8005352020264" seca="false"/>
<waypoint lat="38.2301750183105" lon="22.4502639770508" seca="false"/>
<waypoint lat="38.3078460693359" lon="22.0923881530762" seca="false"/>
<waypoint lat="38.3470115661621" lon="21.9775218963623" seca="false"/>
<waypoint lat="38.3525581359863" lon="21.8507251739502" seca="false"/>
<waypoint lat="38.3245086669922" lon="21.7836151123047" seca="false"/>
<waypoint lat="1.5563510656357" lon="108.975273132324" name="KALIMANTAN WEST (RP)" seca="false"/>
<waypoint lat="3.5768096446991" lon="110.003883361816" seca="false"/>
<waypoint lat="17.2663631439209" lon="118.031089782715" seca="false"/>
<waypoint lat="21.8487491607666" lon="121.073471069336" seca="false"/>
<waypoint lat="22.5359420776367" lon="121.593360900879" name="LAN YU IS. (RP)" seca="false"/>
<waypoint lat="34.9842147827148" lon="129.087631225586" seca="false"/>
<waypoint lat="35.0500526428223" lon="129.164993286133" seca="false"/>
<waypoint lat="35.1067888889" lon="129.0624694444" name="PUSAN" seca="false"/>
</section>
</route>
为什么我无法通过SQL服务器获得结果?
EDIT1: API提供有关返回结果的次数的信息。当我从SQL服务器调用它时,它返回null但是API已经发送了所有信息。
EDIT2:
EDIT3:
从程序中调用 https API时存在一些问题。当我尝试调用 http API工作正常时。
答案 0 :(得分:1)
由于缺少客户端证书,我可以从程序中调用任何HTTP而不是HTTPS。我从浏览器复制了证书,呼叫成功。邮递员和浏览器具有获取证书的内置功能。</ p>
但是在任何情况下都应该阻止来自程序的直接HTTP调用,因为这里的评论中提到了它。