sql server 存储过程访问 url
/****** Object: StoredProcedure [dbo].[P_Url_SendRequest] Script Date: 2021/3/5 19:25:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE PROCEDURE [dbo].[P_Url_SendRequest] ( @Url VARCHAR(8000) = '' , @PostData VARCHAR(8000) = '' , @ResponseText VARCHAR(8000) = '' OUTPUT ) AS SET NOCOUNT ON DECLARE @ServiceUrl AS VARCHAR(1000) DECLARE @UrlAddress VARCHAR(500) , @ErrMsg VARCHAR(5000) SET @ServiceUrl = @Url PRINT @ServiceUrl DECLARE @Object AS INT , @status INT , @returnText AS VARCHAR(8000) , @HttpStatus VARCHAR(200) , @HttpMethod VARCHAR(20) = 'get' IF ISNULL(@PostData, '') <> '' SET @HttpMethod = 'post' /*初始化对*/ EXEC @status = sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT; IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '初始化对象失败,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 1 END
/*设置超时*/
EXEC sp_OAMethod @Object,'setTimeouts',NULL,8000,8000,8000,8000
/*创建链接*/ EXEC @status = sp_OAMethod @Object, 'open', NULL, @HttpMethod, @ServiceUrl, 'false' IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '创建连接失败,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 2 END SELECT @HttpMethod IF @HttpMethod = 'post' BEGIN --EXEC @status = sp_OAMethod @Object, 'setRequestHeader', -- 'Content-Type', 'application/x-www-form-urlencoded' EXEC @status = sys.sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'; END ELSE BEGIN EXEC @status = sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'text/xml; charset=gb2312' PRINT @status END IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '设置RequestHeader属性失败,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 2 END EXEC @status = sp_OAMethod @Object, 'send', NULL, @PostData IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '发送请求头失败,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 3 END EXEC @status = sys.sp_OAGetProperty @Object, 'Status', @HttpStatus OUT; IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '读取[Status]属性值失败,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 3 END IF @HttpStatus <> 200 BEGIN SET @ErrMsg = '访问错误,http状态代码,' + @HttpStatus RAISERROR(@ErrMsg,16,1); RETURN -6; END EXEC @status = sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '获取回复报文失败,' + ISNULL(@ErrMsg, '') + ISNULL(@returnText, '') + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 4 END EXEC @status = sp_OADestroy @Object IF @status <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT SET @ErrMsg = '释放资源对象,' + @ErrMsg + ISNULL(@returnText, '') RAISERROR(@ErrMsg,16,-1) RETURN 5 END RETURN 0 GO
通过以下语句,开启里面所用组件的支持
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)