gpt4 book ai didi

sql - 从存储过程调用 API

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:33 24 4
gpt4 key购买 nike

我正在尝试从存储过程中的 API 获取结果,但结果为空。我无法代表实际调用,因为它包含敏感信息,但它具有以下逻辑:

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 server 获取结果?

编辑1:API 提供有关返回结果次数的信息。当我从 SQL 服务器调用它时,它返回 null 但 API 已发送所有信息。

编辑2:

  • 当我在 Postman 运行 Web API 时,它运行正常。
  • 如果我复制结果并创建模拟 API 以提供相同的结果集,然后从 SQL Server 调用模拟 API,它工作正常
  • (!) 如果我从服务器调用 API,所有 hResults 报告为 0(成功)但数组上的最终选择返回 null

编辑3:

从过程中调用 https API 时存在一些问题。当我尝试调用 http API 时工作正常。

最佳答案

由于缺少客户端证书,我可以从过程中调用任何 HTTP 但不能调用 HTTPS。我从浏览器复制证书,调用成功。 Postman和浏览器都内置了获取证书的功能。

但是在任何情况下,都不应鼓励来自过程的直接 HTTP 调用,因为它在此处的评论中有所提及。

关于sql - 从存储过程调用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47409741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com