我怎么能读在C#XML从另一个网页登录到网站
-
21-08-2019 - |
题
我已登录在网站与我的网页浏览器和每次我尝试打电话
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
管理认证的饼干。
要做到这一点,你将:
- 创建一个
CookieContainer
目(a饼干罐),您可以跟踪整个范围的每一个请求你作出。 - 创建一个
HttpWebRequest
登录到网站上,你在访问。 - 使用
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;
}
请注意:这不是一个独特的解决方案,我发现了这一点,有在网络上我自己,但我已经实现了解决方案,它的作品真的很好。