This Article has used to execute/visit the http request via Sqlserver 2008 R2 stored proc.Sometimes we need to call some external WS service/Http Url inside the backend objects.I think this will helpfull to resolve this kind of queries.
Before the creation we nedd to Grant permision to following system object under desired sqlserver user.
sp_OASetProperty
sp_OAMethod
sp_OAGetErrorInfo
sp_OADestroy
sp_OAStop
sp_OACreate
sp_OAGetProperty
Sqlserver Stored Procedure
Create procedure [dbo].[HTTP_DB_ALERT]( @sUrl varchar(2000), @response varchar(8000)
out)
As
Declare
@obj int
,@hr int
,@status int
,@msg varchar(255)
exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr <> 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp.3.0
failed', 16,1) return end
exec @hr = sp_OAMethod @obj, 'open', NULL, 'POST', @sUrl, false
if @hr <>0 begin set @msg = 'sp_OAMethod Open failed' goto eh end
exec @hr = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type',
'application/x-www-form-urlencoded'
if @hr <>0 begin set @msg = 'sp_OAMethod setRequestHeader failed' goto
eh end
exec @hr = sp_OAMethod @obj, send, NULL, ''
if @hr <>0 begin set @msg = 'sp_OAMethod Send failed' goto eh end
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT
if @hr <>0 begin set @msg = 'sp_OAMethod read status failed' goto
eh
end
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +
str(@status) goto eh end
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT
if @hr <>0 begin set @msg = 'sp_OAMethod read response failed' goto
eh end
exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
This comment has been removed by the author.
ReplyDeleteCan someone help on how to make request of ssl. this is what i have thus far but i am not getting any response.
ReplyDeleteDeclare @Object Int
Declare @ResponseText Varchar(8000)
Declare @url varchar(255)
Declare @src varchar(255)
Declare @desc varchar(255)
set @url = 'https//somedomain.com/ActionServlet?param1=val1¶m2=val2¶m3=val3'
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT
Exec sp_OAMethod @Object, 'open', NULL, 'get', @url, 'false'
--(Optional) Ignore Certificate Verification
--not sure how to do this
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
EXEC sp_OAGetErrorInfo @Object, @src OUT, @desc OUT
select @src
select @desc
Exec sp_OADestroy @Object
Good work Dear
ReplyDeleteNice working