代码之家  ›  专栏  ›  技术社区  ›  Enriquev

System.ServiceModel.Syndication身份验证

  •  0
  • Enriquev  · 技术社区  · 15 年前

    如何使用System.ServiceModel.Syndication的身份验证来读取私有RSS?

    我现在使用的代码只是返回禁止。

    我尝试将&pass=password和&password=password添加到URL中,但没有帮助。

        try
        {
            using (XmlReader reader = XmlReader.Create("http://trac:8080/Project/report/7?format=rss&USER=enr"))
            {
                tracFeed = SyndicationFeed.Load(reader);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   Ta01    15 年前

    是否尝试为URI创建WebRequest,并将凭据传递给WebRequest。然后,您可以从请求的响应流创建一个xmlreader,并通过syndicationfeed加载该读卡器。加载,afaik加载本身不提供直接传递凭据的方法,您需要发出一个Web请求并将基本凭据附加到您请求的URI。这个 article 正在尝试做与您的问题类似的事情。

        2
  •  1
  •   Enriquev    15 年前

    @ BNKDEV 你是对的,但有些事情不起作用,我不知道为什么,但我想这似乎是服务器上的问题?

        SyndicationFeed tracFeed;
    
        string user = "enr";
        string password = "enr";
    
        System.Net.WebClient wc = new System.Net.WebClient();
    
        wc.Credentials = new System.Net.NetworkCredential(user, password);
    
        //this works!
        string web = wc.DownloadString("http://trac:8080/project/login/xmlrpc");
    
        //this gives a 403 forbidden !! :-(
        System.IO.Stream webClientStream = wc.OpenRead("http://trac:8080/project/report/7?format=rss&USER=enr");
    
        try
        {
    
            using (XmlReader reader = XmlReader.Create(webClientStream))
            {
                tracFeed = SyndicationFeed.Load(reader);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            webClientStream.Close();
        }
    

    两个URL都在IE中工作,区别在于第一个URL会立即弹出一个登录窗口,第二个URL会将我重定向到一个可以登录的页面…

    所以我真的认为那里有些可疑的东西……