I have copied the code from setting soap request properties from T-sql and make some litle changes.
If soap version 1.2 the code works fine. My problem is that soap version 1.1 wants to load the PELTT01.wsdl file to work.
declare
#Url varchar(1024),
#HttpMethod varchar(10),
#ParamsValues varchar(1024),
#SoapAction varchar(8000),
#datefrom varchar(30),
#dateto varchar(30),
#sessionid as varchar(3000),
#xmlOut1 varchar(8000),
#RequestText as varchar(8000),
#wsdl as varchar(8000),
#responseHeader varchar(4000)
DECLARE #t table (ID int, strxml xml)
set #Url = 'http://212.205.47.226:9003'
set #HttpMethod = 'soap'
set #SoapAction = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pel="/PELTT01">
<soapenv:Header/>
<soapenv:Body>
<pel:READ>
<pel:wpel_code>999999999</pel:wpel_code>
<pel:wpel_user>9999999</pel:wpel_user>
<pel:wpel_pass>9999999</pel:wpel_pass>
<pel:wpel_vg>ZK000000000GR</pel:wpel_vg>
<pel:wpel_ref>?</pel:wpel_ref>
<pel:wpel_flag>1</pel:wpel_flag>
</pel:READ>
</soapenv:Body>
</soapenv:Envelope>'
declare #obj int
,#response varchar(8000)
,#responseText varchar(8000)
,#status varchar(50)
,#statusText varchar(1024)
,#method varchar(10) = (case when #HttpMethod in ('soap','SOAP') then 'POST' else #HttpMethod end)
exec sp_OACreate 'MSXML2.ServerXMLHTTP', #obj out
exec sp_OAMethod #obj, 'Open', null, #method, #Url, 'false'
exec sp_OAMethod #obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
exec sp_OAMethod #obj, 'setRequestHeader', null, 'SOAPAction', #SoapAction
exec sp_OAMethod #obj, 'send', null, #SoapAction
exec sp_OAGetProperty #obj, 'responseText', #responseText out
EXECUTE sp_OAMethod #Obj, 'getAllResponseHeaders', #responseHeader OUT
exec sp_OAGetProperty #obj, 'Status', #status out
exec sp_OADestroy #obj
SELECT #status 'status', #responseText 'responsetext', #responseHeader 'Response Header'
Related
I am trying to call Formsite API from SQL Server to get the data but I am unable to get the data it is returning me null, below is the script which I am using to get the data.
This is my API link (dummy link):
https://fs29.formsite.com/api/v2/xyz/forms/form14/
Access Token (also dummy):
myaccesskey
And the script which I am using is
DECLARE #authHeader NVARCHAR(64);
DECLARE #contentType NVARCHAR(64);
DECLARE #postData NVARCHAR(MAX);
DECLARE #responseText NVARCHAR(MAX);
DECLARE #responseXML NVARCHAR(MAX);
DECLARE #ret INT;
DECLARE #status NVARCHAR(32);
DECLARE #statusText NVARCHAR(32);
DECLARE #token INT;
DECLARE #url NVARCHAR(256);
-- Set Authentications
SET #authHeader = 'Bearer **mykey**';
SET #contentType = 'application/json';
SET #url = 'https://fs29.formsite.com/api/v2/GwYV/forms/form14/' -- Dummy api url
EXEC #ret = sp_OACreate 'MSXML2.XMLHTTP', #token OUT;
SELECT #token
IF #ret <> 0
RAISERROR('Unable to open HTTP connection.', 10, 1);
-- build a request
EXEC #ret = sp_OAMethod #token, 'open', NULL, 'GET', #url, 'false';
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Authorization', #authHeader;
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Content-type', #contentType;
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Cache-Control', 'no-cache' ;
EXEC #ret = sp_OAMethod #token, 'send'
-- Handle response
EXEC #ret = sp_OAGetProperty #token, 'status', #status OUT;
EXEC #ret = sp_OAGetProperty #token, 'statusText', #statusText OUT;
EXEC #ret = sp_OAGetProperty #token, 'responseText', #responseText OUT;
-- Print responses
SELECT #responseText
PRINT 'Status: ' + #status + ' (' + #statusText + ')';
PRINT 'Response text: ' + #responseText;
I want to save HTML sites in a table with this query - but it returns Null:
DECLARE #ResponseTXT NVARCHAR(MAX)
DECLARE #obj INT
DECLARE #ValorDeRegreso INT
DECLARE #sUrl NVARCHAR(200)
DECLARE #hr INT
DECLARE #src NVARCHAR(255)
DECLARE #desc NVARCHAR(255)
DECLARE #StringRequest NVARCHAR(500)=''
SET #sUrl = 'http://www.myfootballgames.co.uk' -- as an example
EXEC sp_OACreate 'MSXML2.ServerXMLHttp', #obj OUT
EXEC sp_OAMethod #obj, 'Open', NULL, 'GET', #sUrl, false
EXEC sp_OAMethod #obj, 'setRequestHeader', NULL, 'Content-Type', 'text/html; charset=utf-8'--'application/x-www-form-urlencoded'
EXEC sp_OAMethod #obj, 'send', NULL, #StringRequest
EXEC sp_OAGetProperty #obj, 'responseText', #ResponseTXT OUT
SELECT #ResponseTXT
I am working with API and MSSQL. I need to call an API from SQL Server. But On execution, its response is null. Can anyone list errors if some in the queries?
The API responds but the issue is it shows error in Authentication while I'm using exact correct credentials. It's a POST API.
This is the only way I found correct on browsing the whole a day on Google. Can someone help or list errors?
DECLARE #authHeader NVARCHAR(MAX)= 'Basic XXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX'
DECLARE #contentType NVARCHAR(64) = 'application/json; charset=utf-8'
DECLARE #appVersion NVARCHAR(20) = '3.2.1'
DECLARE #appkey NVARCHAR(50) = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
DECLARE #deviceId NVARCHAR(50) = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
DECLARE #deviceType int = 1;
DECLARE #language int = 1;
DECLARE #status NVARCHAR(32);
DECLARE #statusText NVARCHAR(32);
DECLARE #Body as VARCHAR(8000) =
'{
"itemId":"XXXXXXXXXXXXXXXXXXXXXXX",
"itemType":XXXXXXXXXXXXX,
"liked":"true"
}'
DECLARE #responseText NVARCHAR(2000);
DECLARE #token INT;
DECLARE #url NVARCHAR(256) = 'https://api-stage.testapp.com/v4/test';
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', #token OUT;
EXEC sp_OAMethod #token, 'open', NULL, 'POST', #url, 'false'
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'Authentication', #authHeader
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'Content-type', #contentType
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'appVersion', #appVersion
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'appkey', #appkey
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'deviceId', #deviceId
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'devicetype', #deviceType
EXEC sp_OAMethod #token, 'setRequestHeader', NULL, 'language', #language
EXEC sp_OAMethod #token, 'send', null
Exec sp_OAMethod #token, 'setRequestBody', null, 'Body', #body
EXEC sp_OAGetProperty #token, 'status', #status OUT;
EXEC sp_OAGetProperty #token, 'statusText', #statusText OUT;
EXEC sp_OAGetProperty #token, 'responseText', #responseText OUT;
PRINT 'Status: ' + #status + ' (' + #statusText + ')';
PRINT 'Response text: ' + #responseText;
Select #ResponseText as Response
I'm working on calling TaxJar API from SQL Server, I saw some articles like:
calling an api from sql server stored-procedure
but unfirtunately I did know how to pass a Token value to the call
Here is a sample of the Get Call I'm making in Poestman:
https://api.taxjar.com/v2/rates/90404-3370
Token: XXXXXXXXXXX
Postman sample
anythoyghts how to do it please?
Thanks
here is a code sample of what i've done so far:
DECLARE
#Result INT,
#Text nVARCHAR(max),
#Obj int,
#HTTPStatus smallint,
#URL Varchar(MAX)
DECLARE #output varchar(255);
DECLARE #hr int;
DECLARE #source varchar(255);
DECLARE #description varchar(255);
SET #Text = '-H "Authorization: Bearer [TOKEN VALUE]'
SET #Url = 'https://api.taxjar.com/v2/rates/90404-3370 \'
EXEC #Result = sp_OACreate 'WinHttp.WinHttpRequest.5.1', #Obj OUT
EXEC #Result = sp_OAMethod #Obj, 'open', NULL, 'GET', #URL, false
EXEC #Result = sp_OAMethod #Obj, 'setRequestHeader', NULL, 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'
EXEC #Result = sp_OAMethod #Obj, 'setRequestHeader', NULL, 'Access-Control-Allow-Origin', '*'
EXEC #Result = sp_OAMethod #Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/json'
EXEC #Result = sp_OAMethod #Obj, send, NULL, #Text
EXEC #Result = sp_OAGetProperty #Obj, 'status', #HTTPStatus OUT
PRINT #Result
EXEC #Result = sp_OAGetErrorInfo #obj, #source OUT, #description OUT;
IF #Result = 0
BEGIN
SET #output = ' Source: ' + #source + CHAR(13) + CHAR(10)
SET #output = #output + ' Description: ' + #description
PRINT 'OLE Automation Error Information';
PRINT #output
END
================================================================
UPDATE:
HERE IS MY SQL CODE AND IT WORKED PARTIALLY
DECLARE #authHeader NVARCHAR(64);
DECLARE #contentType NVARCHAR(64);
DECLARE #postData NVARCHAR(MAX);
DECLARE #responseText NVARCHAR(MAX);
DECLARE #responseXML NVARCHAR(MAX);
DECLARE #ret INT;
DECLARE #status NVARCHAR(32);
DECLARE #statusText NVARCHAR(32);
DECLARE #token INT;
DECLARE #url NVARCHAR(256);
-- Set Authentications
SET #authHeader = 'Bearer [TOKEN VALUE]';
SET #contentType = 'application/json';
SET #url = 'https://api.taxjar.com/v2/summary_rates'
EXEC #ret = sp_OACreate 'WinHttp.WinHttpRequest.5.1', #token OUT;
IF #ret <> 0 RAISERROR('Unable to open HTTP connection.', 10, 1);
-- build a request
EXEC #ret = sp_OAMethod #token, 'open', NULL, 'GET', #url, 'false';
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Authorization', #authHeader;
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Content-type', #contentType;
EXEC #ret = sp_OAMethod #token, 'setRequestHeader', NULL, 'Cache-Control', 'no-cache' ;
EXEC #ret = sp_OAMethod #token, 'send'
-- Handle responce
EXEC #ret = sp_OAGetProperty #token, 'status', #status OUT;
EXEC #ret = sp_OAGetProperty #token, 'statusText', #statusText OUT;
EXEC #ret = sp_OAGetProperty #token, 'responseText', #responseText OUT;
-- Print responec
PRINT 'Status: ' + #status + ' (' + #statusText + ')';
PRINT 'Response text: ' + #responseText;
THE URL IS RETURNING NOTHING IN SQL BUT IN POSTMAN IT RETURNS VALUES!
Try using this CLR Stored proc https://github.com/geral2/SQL-APIConsumer
DECLARE #Result AS TABLE
(
Token VARCHAR(MAX)
)
INSERT INTO #Result
exec [dbo].[APICaller_POST]
#URL = 'http://localhost:5000/api/auth/login'
,#BodyJson = '{"Username":"gdiaz","Password":"password"}'
DECLARE #Token AS VARCHAR(MAX)
SELECT TOP 1 #Token = CONCAT('Bearer ',Json.Token)
FROM #Result
CROSS APPLY ( SELECT value AS Token FROM OPENJSON(Result)) AS [Json]
EXEC [dbo].[APICaller_GETAuth]
#URL = 'http://localhost:5000/api/values'
, #Token = #Token
Below is the code I am using to connect to my api server. All works fine for other calls, but when it comes to uploading images, it's not working. If I copy the code into SoapUI and run from there, it does work but in SoapUI I have to change the request property "Enable inline files" to true.
Does anyone knows how I can pass that property value in my below code?
declare
#Url varchar(1024),
#HttpMethod varchar(10),
#ParamsValues varchar(1024),
#SoapAction varchar(8000)
DECLARE #t table (ID int, strxml xml)
set #Url = 'https://api.my.com/api.asmx'
set #HttpMethod = 'soap'
set #SoapAction = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:apic="http://apiconn.com">
<soap:Header/>
<soap:Body>
<apic:AddBook>
<apic:addbookID>18</apic:addbookID>
<apic:data>file:C:/temp/Book2.csv</apic:data>
<apic:dataType>CSV</apic:dataType>
</apic:AddBook>
</soap:Body>
</soap:Envelope>'
if #HttpMethod in ('get','GET') and len(#ParamsValues) > 0
begin
set #Url = #Url + '?' + #ParamsValues
end
declare #obj int
,#response varchar(8000)
,#responseText varchar(8000)
,#status varchar(50)
,#statusText varchar(1024)
,#method varchar(10) = (case when #HttpMethod in ('soap','SOAP') then 'POST' else #HttpMethod end)
--exec sp_OACreate 'WinHttp.WinHttpRequest.5.1', #obj out
exec sp_OACreate 'MSXML2.ServerXMLHTTP', #obj out
exec sp_OAMethod #obj, 'Open', null, #method, #Url, false
if #HttpMethod in ('get','GET')
begin
exec sp_OAMethod #obj, 'send'
end
else if #HttpMethod in ('post','POST')
begin
exec sp_OAMethod #obj, 'setRequestHeader', null, 'Content-Type', 'application/x-www-form-urlencoded'
exec sp_OAMethod #obj, 'send', null, #ParamsValues
end
else if #HttpMethod in ('soap','SOAP')
begin
if #SoapAction is null
raiserror('#SoapAction is null', 10, 1)
declare #host varchar(1024) = #Url
if #host like 'http://%'
set #host = right(#host, len(#host) - 7)
else if #host like 'https://%'
set #host = right(#host, len(#host) - 8)
if charindex(':', #host) > 0 and charindex(':', #host) < charindex('/', #host)
set #host = left(#host, charindex(':', #host) - 1)
else
set #host = left(#host, charindex('/', #host) - 1)
exec sp_OAMethod #obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
exec sp_OAMethod #obj, 'setRequestHeader', null, 'Host', #host
exec sp_OAMethod #obj, 'setRequestHeader', null, 'SOAPAction', #SoapAction
exec sp_OAMethod #obj, 'send', null, #SoapAction
end
Insert into #t (strxml)
exec sp_OAGetProperty #obj, 'responseXML.xml' --, #responseText out
exec sp_OAGetProperty #obj, 'Status', #status out
exec sp_OADestroy #obj
declare #X xml
select #X = strxml from #t
SELECT #X
SELECT #status