C# 如何在HTTPWebRequest期间防止Internet Explorer安全警报

C# 如何在HTTPWebRequest期间防止Internet Explorer安全警报,c#,security,httpwebrequest,ssl-certificate,mshtml,C#,Security,Httpwebrequest,Ssl Certificate,Mshtml,有没有办法防止出现错误消息,或者在检索HTTPWebRequest时以编程方式单击弹出消息的yes?下面显示的代码导致出现一条警告消息,其文本为“此页面存在未指明的潜在安全风险。是否继续?”消息标题为“Internet Explorer”。有关可能导致错误消息的原因的一些线索如下: •它似乎不是由sslPolicyErrors引起的,因为代码行ServicePointManager.ServerCertificateValidationCallback=((发送方、证书、链、sslPolicyE

有没有办法防止出现错误消息,或者在检索HTTPWebRequest时以编程方式单击弹出消息的yes?下面显示的代码导致出现一条警告消息,其文本为“此页面存在未指明的潜在安全风险。是否继续?”消息标题为“Internet Explorer”。有关可能导致错误消息的原因的一些线索如下:

•它似乎不是由sslPolicyErrors引起的,因为代码行ServicePointManager.ServerCertificateValidationCallback=((发送方、证书、链、sslPolicyErrors)=>true);应该防止这种情况

•设置Internet Explorer选项,使网站位于受信任网站列表中

•在执行最后一行代码的下一行之后出现消息:-oDoc.close()

•通过在widows表单上单击按钮来运行代码,可以观察到该消息

•必须手动单击错误消息三次(是或否),才能显示该消息

•这是迄今为止唯一一个导致此错误消息的网站

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using System.Threading;
using System.Net;
using mshtml;

namespace FitCShp
{
    public partial class frmThreadIssue : Form
    {
        public frmThreadIssue()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            HTMLDocumentClass oDoc;
            oDoc = GetDoc();
        }

        public HTMLDocumentClass GetDoc()
        {
            string WebAddrs = "http://jobsearch.monster.com/PowerSearch.aspx?q=proven%20record%20relationship&where=portland%2C%20or&rad=20&rad_units=miles&tm=60";
            IHTMLDocument2 oDoc = null;
            HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(WebAddrs); //build the request
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 
            Req.AllowAutoRedirect = true;
            Req.ContentType = "application/x-www-form-urlencoded";
            Req.KeepAlive = false;
            Req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'";
            HttpWebResponse resp = (HttpWebResponse)Req.GetResponse();
            //Get the encoding of the response
            System.Text.Encoding Enc = System.Text.Encoding.GetEncoding(resp.CharacterSet);
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Enc);  //Create the stream reader
            string sDoc = sr.ReadToEnd();      //read the stream that represents the Webdoc
            sr.Close();                         //close the stream  
            HTMLDocument ProfileHTML = new HTMLDocument();
            oDoc = (IHTMLDocument2)ProfileHTML;
            oDoc.write(sDoc);
            oDoc.close();       //--- Error occurs here
            return (HTMLDocumentClass)oDoc;
        }
    }
}

如果您的页面在HTTPS上下文中运行,但通过HTTP引用其他站点的元素,则会收到此安全警告。确保URL中的所有引用内容(如图像、样式表等)都使用HTTPS引用。

如果您的页面在HTTPS上下文中运行,但通过HTTP引用其他站点的元素,则会收到此安全警告。确保所有引用的内容(如图像、样式表等)都在URL中使用HTTPS引用。

HttpWebRequest发生在服务器端,而不是客户端,因此这不是客户端发出警告消息的原因。浏览器做出这种反应的唯一方式是如果对标记本身进行了非安全调用。

HttpWebRequest发生在服务器端,而不是客户端,因此这不是客户端发出警告消息的原因。浏览器做出这种反应的唯一方式是,如果您对标记本身进行了非安全调用。

尝试在“工具”->“InternetOptions”->“高级”->“安全”下使用安全设置。例如“允许我的计算机中的文件中的活动内容运行…”

尝试使用“工具”->“Internet选项”->“高级”->“安全”下的安全设置。例如“允许我的计算机中的文件中的活动内容运行…”

在创建对象HTMLDocument之前删除所有javascript代码,下面是我的VB代码:

response = Regex.Replace(resp, "<script.*?</script>", String.Empty, RegexOptions.Singleline)

response=Regex.Replace(resp),在创建对象HTMLDocument之前删除所有javascript代码,下面是我的VB代码:

response = Regex.Replace(resp, "<script.*?</script>", String.Empty, RegexOptions.Singleline)

response=Regex.Replace(resp)即使您的站点受信任,该安全级别的设置也可以更改为非常严格的设置…即使您的站点受信任,该安全级别的设置也可以更改为非常严格的设置…@Jaroslav:Crap,我没有注意到Silverlight标记,谢谢。我看到了按钮单击事件,认为这是一个ASP.NET页面,但现在我看到这是一个WinForms表单。显然我对Silverlight的速度不是很快-我不知道你在Silverlight应用程序中使用了System.Windows.Forms.form。我的错。我没有注意到
Windows.Forms
。它仍然是客户端的,但它使用的不是Silverlight,而是
MSHTML
@Jaroslav:ah…现在我知道发生了什么。我从来没有实际使用过WebBrowser控件。在我看来,将Windows窗体和Web混合在一起似乎是个坏主意。Windows窗体只是提供了一种启动应用程序的方法。在应用程序的这一部分中,任何代码都不使用WebBrowser控件。@Jaroslav:Crap,没有注意到Silverlight标记,谢谢。我看到按钮单击event并认为这是一个ASP.NET页面,但现在我看到这是一个WinForms表单。显然,我在Silverlight上的速度不是很快-我没有意识到你在Silverlight应用程序中使用了System.Windows.Forms.form。哦,我的错。我没有注意到
Windows.Forms
。它仍然是客户端,但不是Silverlight,而是使用
MSHTML
@Jaroslav:Ahh…现在我明白了。我从来没有真正使用过WebBrowser控件。对我来说,将Windows窗体和Web混合在一起似乎是个坏主意。Windows窗体只是提供了一种启动应用程序的方法。在应用程序的这一部分中,任何代码都不使用WebBrowser控件。在这一点上,我意识到了p问题与HTTPWebRequest无关,因为我可以保存HTTPWebRequest(sDoc)结果的字符串作为文件而不触发错误消息。但是,如果我打开该文件并将其转换为IHTMLDocument2,则错误消息会重新出现。因此,问题似乎在于阻止mshtml命名空间中的COM对象生成错误消息,该对象将字符串转换为IHTMLDocument2文档。是否尝试启用acferoze:我确实尝试启用了活动内容。我基本上启用了我可以启用的所有选项。但是,我仍然收到消息。有没有办法从Internet Explorer中删除所有安全措施并进行测试,看看是否可以解决问题。在另一个论坛中,有人建议将HTML组件转换为XML或XHTML,并使用system.XML工具分析页面。我担心这两个系统的可交换性。此时,我意识到问题与HTTPWebRequest无关,因为我可以保存HTTPWebRequest(sDoc)的结果字符串作为文件而不触发错误消息。但是,如果我打开该文件并将其转换为IHTMLDocument2,则错误消息会再次出现。因此,问题似乎在于阻止mshtml命名空间中的COM对象生成错误消息,该对象将字符串转换为IHTMLDocument2文档。是否尝试启用