在C#程序中从Firefox获取网页内容

时间:2010-12-23 11:41:23

标签: c# firefox-addon

我需要编写一个简单的C#应用​​程序,该应用程序应该接收当前在Firefox中打开的网页的全部内容。有没有办法直接从C#做到?如果没有,是否有可能开发一种可以传输页面内容的插件?由于我是Firefox插件编程的新手,我真的很感激有关让我快速入门的任何信息。也许有一些我可以作为参考的来源?文档链接?建议?

UPD :我实际上需要与Firefox实例通信,而不是从给定的URL获取网页内容

5 个答案:

答案 0 :(得分:1)

如果你详细说明你想要实现的目标,那将会有所帮助。可能是插件已经在那里,如firebug可以帮助。

Anways,如果你真的想开发插件和C#应用程序:

在firefox扩展上查看本教程: http://robertnyman.com/2009/01/24/how-to-develop-a-firefox-extension/

否则,您可以在.NET请求中使用WebRequest或HttpWebRequest类来获取任何URL的HTML源。

答案 1 :(得分:0)

我认为你几乎肯定需要为此编写一个Firefox插件。但是,有一些方法可以请求网页,并在C#中接收其HTML响应。这取决于您的要求是什么?

如果您的要求只是从任何网站接收来源,请发表评论,我会指向您的代码。

答案 2 :(得分:0)

Uri uri = new Uri(url); 
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri);
        req.AllowAutoRedirect = true;
        req.MaximumAutomaticRedirections = 3;
        //req.UserAgent = _UserAgent; //"Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Searcharoo.NET)";
        req.KeepAlive = true;
        req.Timeout = _RequestTimeout * 1000; //prefRequestTimeout 

        // SIMONJONES http://codeproject.com/aspnet/spideroo.asp?msg=1421158#xx1421158xx
        req.CookieContainer = new System.Net.CookieContainer();
        req.CookieContainer.Add(_CookieContainer.GetCookies(uri));

System.Net.HttpWebResponse webresponse = null;

        try
        {
            webresponse = (System.Net.HttpWebResponse)req.GetResponse();
        }
        catch (Exception ex)
        {
            webresponse = null;
            Console.Write("request for url failed: {0} {1}", url, ex.Message);
        }

        if (webresponse != null)
        {
            webresponse.Cookies = req.CookieContainer.GetCookies(req.RequestUri);
            // handle cookies (need to do this incase we have any session cookies)
            foreach (System.Net.Cookie retCookie in webresponse.Cookies)
            {
                bool cookieFound = false;
                foreach (System.Net.Cookie oldCookie in _CookieContainer.GetCookies(uri))
                {
                    if (retCookie.Name.Equals(oldCookie.Name))
                    {
                        oldCookie.Value = retCookie.Value;
                        cookieFound = true;
                    }
                }
                if (!cookieFound)
                {
                    _CookieContainer.Add(retCookie);
                }
            }
string enc = "utf-8"; // default
            if (webresponse.ContentEncoding != String.Empty)
            {
                // Use the HttpHeader Content-Type in preference to the one set in META
                doc.Encoding = webresponse.ContentEncoding;
            }
            else if (doc.Encoding == String.Empty)
            {
                doc.Encoding = enc; // default
            }
            //http://www.c-sharpcorner.com/Code/2003/Dec/ReadingWebPageSources.asp
            System.IO.StreamReader stream = new System.IO.StreamReader
                (webresponse.GetResponseStream(), System.Text.Encoding.GetEncoding(doc.Encoding));

webresponse.Close();

答案 3 :(得分:0)

这就是您想要的。

using System.Net;

var cli = new WebClient();
string data = cli.DownloadString("http://www.heise.de");
Console.WriteLine(data);

答案 4 :(得分:0)

  

Native messaging使扩展能够与用户计算机上安装的本机应用程序交换消息。