【问题标题】:Download content from the internet with code使用代码从 Internet 下载内容
【发布时间】:2012-08-22 20:18:31
【问题描述】:

我每天都必须从网站下载一些内容,所以我认为有一个可以做到这一点的程序会很好......问题是该网站需要身份验证。

我目前的解决方案是使用System.Windows.Forms.WebBrowser 控件。我目前正在做类似的事情:

/* Create browser */
System.Windows.Forms.WebBrowser browser = new System.Windows.Forms.WebBrowser();

/* navigate to desired site */ 
browser.Navigate("http://stackoverflow.com/");

// wait for browser to download dom

/* Get all tags of type input */
var elements = browser.Document.Body.GetElementsByTagName("input");

/* let's look for the one we are interested */
foreach (System.Windows.Forms.HtmlElement curInput in elements)
{
       if (curInput.GetAttribute("name") == "q") // 
       {
             curInput.SetAttribute("value", "I changed the value of this input");
             break;
       }
}

// etc

我认为这种方法可行,但不是最佳解决方案。我尝试使用 webclient 类,这似乎有效,但由于某种原因它不起作用。我相信它不起作用的原因是因为我必须保存 cookie?

所以我的问题是我如何能够跟踪发送到服务器的所有字节以及响应的所有字节以下载我需要的内容。换句话说,我希望让 webclient 充当 webbrowser,一旦我通过查看源代码到达我需要的部分,我应该能够解析我需要的数据。

如果有人可以向我展示如何执行此操作的示例,我将不胜感激。谷歌浏览器在显示大量信息方面做得很好:

提前致谢,

安东尼奥

【问题讨论】:

  • 希望你使用DocumentCompleted事件“//等待浏览器下载dom”
  • “由于某种原因它不起作用” - 如果您向我们展示您尝试过的内容会有所帮助。如果身份验证需要 cookie,那么这可能确实是问题所在。
  • 如果这个任务是一个练习一些 .NET 开发的机会,那么很好!否则,不妨看看 curl 实用程序。
  • 是的,很抱歉这个模糊的例子。我正在寻找一个答案,使我能够做我需要的事情,而不管网站如何,而不仅仅是针对这个问题的一些事情......

标签: c# automation webserver webclient


【解决方案1】:

回答你的问题:

  1. 我所知道的跟踪流量的最佳实用程序是Fiddler(它是免费的)。
  2. 要发送高级 HTTP 请求,您应该使用类 System.Net.HttpWebRequest,它还具有属性 CookieContainerHeaders,让您可以为所欲为。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多