MSSQL CLR功能Webreqest 401未经授权

时间:2018-08-02 09:32:20

标签: c# sql-server-2008 sqlclr

我具有CLR功能,可从Cookie授权的网站获取数据。第一个请求获取登录cookie,第二个请求获取我需要的xml数据。问题在于,从SQL Server作为函数运行它时,我总是在第二个请求上得到401未经授权。 使用相同DLL的测试控制台应用程序运行正常。看起来第二个请求没有cookie,但是我异常检查了第二个请求的cookie容器数量,它不为空。

        String encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(UserName + ":" + Password));

        try
        {
            HttpWebRequest loginrequest = (HttpWebRequest)WebRequest.Create(string.Format("{0}", BaseOrdersAddress));
            CookieContainer logincookies = new CookieContainer();
            loginrequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + encoded);
            loginrequest.AllowAutoRedirect = false;
            loginrequest.CookieContainer = logincookies;
            loginrequest.Method = WebRequestMethods.Http.Get;

            HttpWebResponse loginresponse = (HttpWebResponse)loginrequest.GetResponse();

            loginresponse.Close();

            if (loginresponse.StatusCode == HttpStatusCode.Found)
            { 
              location = loginresponse.Headers[HttpResponseHeader.Location];
              HttpWebRequest request = (HttpWebRequest)WebRequest.Create(location);
              request.CookieContainer = logincookies;
              request.Method = WebRequestMethods.Http.Get;

              HttpWebResponse response1 = request.GetResponse() as HttpWebResponse;


              var xresult = new XmlSerializer(typeof(Local_Response));
              r = (Local_Response)xresult.Deserialize(response1.GetResponseStream());

            }

2 个答案:

答案 0 :(得分:1)

已解决。 问题在于使用 HttpWebRequest.CookieContainer ,不知道为什么,但是在作为CLR函数运行时不起作用,没有发送cookie。必须手动添加 HttpRequestHeader.Cookie 来请求标头集合。

答案 1 :(得分:0)

不要忘记,您的SQLCLR代码在SQL Server上下文中执行。我看到您在代码中有一个用户名和密码-这样做是什么,从中检索到的用户名/密码在哪里。我敢打赌,根据我之前所说的,这有问题。