C# WebBrowser控件代理

18

如何在C# WebBrowser控件/组件中实现代理。

我想知道的是如何实现代理,这样我的C# webBrowser控件在运行时使用代理进行浏览。

我也不想通过注册表更改代理...因为这会影响我的正常浏览...


可能是重复的问题:如何为Webbrowser控件设置代理,而不影响系统/IE代理 - Sheng Jiang 蒋晟
1个回答

15
private Uri currentUri;

        private void Form1_Load(object sender, EventArgs e)
        {
            currentUri = new Uri(@"http://www.stackoverflow.com");
            HttpWebRequest myRequest = (HttpWebRequest) HttpWebRequest.Create("http://www.stackoverflow.com");
            //WebProxy myProxy = new WebProxy("208.52.92.160:80");
            //myRequest.Proxy = myProxy;

            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

            webBrowser1.DocumentStream = myResponse.GetResponseStream();

            webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
        }

        void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if (e.Url.AbsolutePath != "blank")
            {
                currentUri = new Uri(currentUri, e.Url.AbsolutePath);
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri);

                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                webBrowser1.DocumentStream = myResponse.GetResponseStream();
                e.Cancel = true;
            }
        }

你需要稍微调整一下,但我能够浏览整个网站。

或者你可以尝试修改WebRequest.DefaultWebProxy设置: http://msdn.microsoft.com/en-us/library/system.net.webrequest.defaultwebproxy.aspx


那接下来呢?拦截所有导航事件再次使用您自己的 HttpWebRequest 吗? - Edward Thomson
2
我认为您无法设置WebRequest.DefaultWebProxy,但是您可以自己拦截它并创建自己的导航。 - Nick Bray
4
好的技术(我点了赞)- 但是这并没有涵盖回发和Cookie。 - WantToBeAnonomous
@NickBray 如果被请求的网页有很多图片、脚本等需要通过代理服务器传递的内容,这个解决方案是否有效?如何尝试对此解决方案进行端到端测试? - deostroll
这对我来说非常有效,可以加载初始页面,但是当使用Document.GetElementById("submit").InvokeMember("click")时,它无法加载下一页。 currentUri变量设置为空白,屏幕只显示白色页面。有没有一种方法可以捕获从单击按钮产生的流? - Sean Perryman
2
问题在于,文档是使用代理流加载的,但是其余内容,如js文件、图像甚至框架url都是使用非代理连接加载的。我也在寻找解决方法,但似乎控件本身并没有个别设置或代理,而是使用真正的IE提供的任何内容... - Beep.exe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接