尝试使用HttpWebRequest和以下代码在线访问XML:
HttpWebRequest webRequest = HttpWebRequest.Create("http://example.com/example.xml") as HttpWebRequest;
webRequest.CookieContainer = new CookieContainer();
HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII);
string data = sr.ReadToEnd();
当我浏览URL时,我可以看到XML,但可变数据包含以下内容:
<html><body><script>document.cookie='lllllll=e0b70895lllllll_e0b70895; path=/';window.location.href=window.location.href;</script></body></html>
我已检查过 webResponse.Cookies ,但它已空。
如何使用webrequest将xml导入数据变量?
答案 0 :(得分:0)
你写的所有内容都是正确的。问题出在你的情况下(但它对机器人来说是一个很好的解决方案),通过Javascript添加cookie而不是HTTP响应。
document.cookie='lllllll=e0b70895lllllll_e0b70895; path=/'
这行JavaScript代码设置了cookie。因此,需要在此响应后设置代码。您可以使用CookieContainer.Add()
方法轻松完成此操作。
window.location.href=window.location.href
这行代码只是刷新页面,但如果在浏览器中已经设置了cookie,那就是为什么你可以获得响应。
要获取此cookie,您需要使用正则表达式,因为我认为cookie的名称也是动态的。
所以你需要添加这样的东西:
// Catch the cookie name and value with using regex, than remove the
// characters what we only need for the regex match.
string cookieName = Regex.Match(data, "'[a-z]*").Value.Remove(0, 1);
string cookieValue = Regex.Match(data, "=[a-zA-Z0-9]*").Value.Remove(0, 1);
webRequest.CookieContainer.Add(new Cookie(cookieName,cookieValue));
webResponse = webRequest.GetResponse() as HttpWebResponse;
StreamReader sr2 = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII);
string data = sr2.ReadToEnd();