Получить XML через GET запрос
#39988956
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
Привет, помогите пожалуйста с функционалом получения ответа GET запроса на HTTPS url
попробовал использовать готовые решения с сайтов, то ничего не выдало результат, да и выполняются по пол минуты
к примеру:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
CREATE PROCEDURE [dbo].[RequestHttpWebService]
@Url varchar(1024),
@HttpMethod varchar(10),
@ParamsValues varchar(1024), -- param1=value¶m2=value
@SoapAction varchar(1024) = null
AS
BEGIN
SET NOCOUNT ON;
if @HttpMethod in ('get','GET') and len(@ParamsValues) > 0
begin
set @Url = @Url + '?' + @ParamsValues
end
declare @obj int
,@response varchar(8000)
,@responseXml xml
,@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
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)
declare @envelope varchar(8000) = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><{action} xmlns="http://tempuri.org/">{params}</{action}></soap:Body></soap:Envelope>'
declare @params varchar(8000) = ''
WHILE LEN(@ParamsValues) > 0
BEGIN
declare @param varchar(256),
@value varchar(256)
IF charindex('&', @ParamsValues) > 0
BEGIN
SET @param = left(@ParamsValues, charindex('&', @ParamsValues) - 1)
set @value = RIGHT(@param, len(@param) - charindex('=', @param))
set @param = left(@param, charindex('=', @param) - 1)
set @params = @params + '<' + @param + '>' + @value + '</'+ @param + '>'
SET @ParamsValues = right(@ParamsValues, LEN(@ParamsValues) - LEN(@param + '=' + @value + '&'))
END
ELSE
BEGIN
set @value = RIGHT(@ParamsValues, len(@ParamsValues) - charindex('=', @ParamsValues))
set @param = left(@ParamsValues, charindex('=', @ParamsValues) - 1)
set @params = @params + '<' + @param + '>' + @value + '</'+ @param + '>'
SET @ParamsValues = NULL
END
END
set @envelope = replace(@envelope, '{action}', @SoapAction)
set @envelope = replace(@envelope, '{params}', @params)
set @SoapAction = 'http://tempuri.org/' + @SoapAction
print @host
print @SoapAction
print @envelope
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, @envelope
end
exec sp_OAGetProperty @obj, 'responseText', @response out
exec sp_OADestroy @obj
select @status as [status], @statusText as [statusText], @response as [response]
END
GO
Сам url:https://stackoverrun.com/ru/q/4739560
версия сервера: Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
|
|