我已登录在网站与我的网页浏览器和每次我尝试打电话

WebClient myWebClient = new WebClient();
string str = myWebClient.DownloadString("http://localhost/myxml.aspx");
Response.Write(str.ToString());

XmlTextReader reader = new XmlTextReader(url);
while (reader.Read()) {
 Response.Write(reader.ReadOuterXml());
} 

响应。写返回我登录网页。

有没有走到附加的用户。至Web客户端或XmlTextReader或如何我可以请求另一页的目前的记录用户?

有帮助吗?

解决方案

你只需要使用对象可以处理储存的饼干。在这种情况下,你会需要的 HttpWebRequest 类。你还需要一个 CookieContainer 管理认证的饼干。

要做到这一点,你将:

  1. 创建一个 CookieContainer 目(a饼干罐),您可以跟踪整个范围的每一个请求你作出。
  2. 创建一个 HttpWebRequest 登录到网站上,你在访问。
  3. 使用 CookieContainer 你创建的步骤1中的每个后续请求。

下面是一个例子如何使用 HttpWebRequest, HttpWebResponse, , Cookiecontainer中的cookie,以便给 类一起做一个简单的请求,将设置一些饼干,然后使用那些饼干后续请求。其他应该很容易假定一切都是形成标记;)

CookieContainer cookieJar = new CookieContainer();

var webRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
webRequest.CookieContainer = cookieJar;

var webResponse = webRequest.GetResponse();

using (var reader = new StreamReader(webResponse.GetResponseStream()))
{
    Response.Write(reader.ReadToEnd());
}

var anotherWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/search?q=stackoverflow.com");
anotherWebRequest.CookieContainer = cookieJar;

webResponse = anotherWebRequest.GetResponse();

另一选项(如果你真的想要使用 WebClient class)是解析出来 ResponseHeaders 酒店的类一旦你做了你的请求,并包括适当的饼干你的下一请求。这是一个小小的更多的参与虽然由于它需要你来管理你的cookie。

因为我假设你希望能够横穿你的网答复XML,我建议你看到开放源图书馆, HtmlAgilityPack.它可以让你送在标记从一个网站(最有可能的)不良好的形成,或者有某种无效的标记,然后修正的无效的部分,这样就可以横这样XML。

其他提示

虽然做了一些屏幕抓取,我有同样的问题。我请求IIS服务器上的一个经典的ASP应用程序(我可以通过一些服务器与reponded的头告诉)。我支持正在进行的会话的方式是通过在Web客户端启用Cookie。世界上没有拨动它,你必须继承Web客户端才能正常工作。

    public class CookieAwareWebClient : WebClient
    {
        protected CookieContainer _container = new CookieContainer();

        public CookieContainer Cookies
        {
            get { return _container; }
            set { _container = value; }
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest httpRequest = base.GetWebRequest(address) as HttpWebRequest;      

            if (httpRequest.CookieContainer != null)
            {
                if (httpRequest != null)
                {
                    CookieCollection newCookies = 
                        GetUniqueCookies(
                                address
                                ,httpRequest.CookieContainer.GetCookies(address)
                                );
                    foreach (Cookie c in newCookies)
                        httpRequest.CookieContainer.Add(c);
                }
            }
            else
                httpRequest.CookieContainer = this.Cookies;

            return (WebRequest)httpRequest;
        }

请注意:这不是一个独特的解决方案,我发现了这一点,有在网络上我自己,但我已经实现了解决方案,它的作品真的很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top