开发者

ASP.net: Getting HTTPS data server-side?

I previously asked on StackOverflow how to parse XML downloaded programmatically by my ASP.net application. By this, I mean that the user visits https://www.example.com/page1.aspx. The code-behind for page1.aspx is supposed to somehow download and parse an xml file located at https://www开发者_C百科.example.com/foo.xml.

I received good answers about how to parse the XML. However, I've been out of luck with being able to retrieve XML from my secure HTTPS server.

I am looking at a situation where https://www.example.com/foo.xml authenticates requests with a cookie. (third party system, not Forms Authentication). The answer I received to my question about how to download and parse XML suggested that I use the System.Net.WebClient class. I read that the WebClient class must be customized to work with cookies. Therefore, I wrote the following code:

public class WebClientWithCookies : WebClient
{
    private CookieContainer m_container = new CookieContainer();

    public CookieContainer CookieContainer
    {
        get { return m_container; }
        set { m_container = value; }
    }

    public void addCookie(Cookie cookie)
    {
        m_container.Add(cookie);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
      WebRequest request = base.GetWebRequest(address);
        if ( request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = m_container;
        }
        return request;
    }
} // end class

However, when the request is received at https://www.example.com/foo.xml, there are no cookies in the request, and so it doesn't work.

How can I work around this problem?


Where are you creating the cookie? That seems to be a missing part from the code you are displaying. There is an "HttpCookie" class as part of the System.Web name space that may be useful.


Here's the code that I eventually wrote that solved the problem:

    private XmlDocument getXmlData(string url)
    {
        System.Net.HttpWebRequest rq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
        System.Net.CookieContainer container = new System.Net.CookieContainer();

        for (int i = 0; i < System.Web.HttpContext.Current.Request.Cookies.Count; i++)
        {
            System.Web.HttpCookie httpcookie = System.Web.HttpContext.Current.Request.Cookies[i];
            string name = httpcookie.Name;
            string value = httpcookie.Value;
            string path = httpcookie.Path;
            string domain = "my.domain";
            System.Net.Cookie cookie = new System.Net.Cookie(name, value, path, domain);
            container.Add(cookie);
        }

        rq.CookieContainer = container;
        rq.Timeout = 10000;
        rq.UserAgent = "Asset Tracker Server Side Code";

        System.Net.HttpWebResponse rs = (System.Net.HttpWebResponse)rq.GetResponse();

        System.Text.Encoding enc = System.Text.Encoding.GetEncoding(1252);

        System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream());

        System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
        xml.Load(rs.GetResponseStream());
        return xml;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜