使用C#创建SSL WebRequest

我正在编写一个代码来读取页面并以编程方式下载内容,但它与浏览器的工作方式不同。 请注意,我也使用cookie字符串。

我的代码是:

string strUrl = "http:" + "//mgac.webex." + "com"; string cookies_str = "vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270; DetectionBrowserStatus=3|1|32|1|4|2; CK_LanguageID_503319=1; CK_TimeZone_503319=4; CK_RegionID_503319=2; vSeg=post_attendee; s_nr=1321305381566-New; s_lv=1321305381566; s_vnum=1322686800567%26vn%3D1; galaxyb_wl=R2355168776; JSESSIONID=Qlq1TR7Hf09KTsGHr4vv2GnTFF0NGRlLmGyYmMvzY5M29pbZ8yNp!31020270;"; string other_saved_cookies = "screenWidth=1280; CK_CDNHostStatus=akamaicdn.webex.com|1322367753273|1"; string s; using (WebClient client = new WebClient()) { client.UseDefaultCredentials = true; client.Headers.Add(HttpRequestHeader.Cookie, cookies_str); s = client.DownloadString(strUrl); } 

我得到了这个答案:“无法找到页面……”

当我用Fiddler扫描请求时,我的浏览器收到了相同的答案,之后他向同一主机发出了使用SSL的新请求。

我如何能够完全相同的请求来接收浏览器之类的内容

告诉客户的信息在哪里 :“需要SSL连接”?

这看起来像你在追求如何在C#中使用SSL的HTTP GET请求? (协议违规)

但将“http”更改为“https”可能是一个很好的起点!
然后,显然,设置一个ServicePointManager.ServerCertificateValidationCallback,如上面post的2个回复中所示。

编辑

 string ua = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0"; 

然后

 client.Headers.Add(HttpRequestHeader.UserAgent, ua); 

然后解析重定向结果的Location标头。

此网站使用302重定向将您带到SSL页面。

WebClient .NET类是一个自动遵循重定向的智能类。 它使用HttpWebRequest类并将AllowAutoRedirect设置为true。

因此,如果您向原始URL发出请求,则WebClient会跳过重定向(使用新请求),而结果为302(某种重定向)。 如果结果代码不同,您将得到结果。 它看起来像一个http请求,但它执行2个http和1个https调用。

在这种情况下,您必须将用户代理设置为之前发布的shunty,因为远程站点不喜欢.NET的默认用户代理:none。

检查此msdn链接HTTP安全性和ASP.NET Web服务

默认情况下,要求安全通道(SSL)复选框是清除的; 选择它以要求SSL。 SSL支持40位和128位加密。 加密使用的位越多,打破它并找出原始位的难度就越大。

一旦您将资源设置为需要SSL进行通信,发送方和接收方之间发送的任何消息都将被加密和签名。 这意味着外部各方无法读取消息的内容。 如果外部方改变了消息中的字节,则消息接收者可以检测到它。

您应该需要一些完整运行代码的凭据或证书信息。

您可以使用RemoteCertificateValidationCallback委托来validationSSL证书

检查这些链接以获取代码帮助:

 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

如何在C#中使用SSL的HTTP GET请求? (协议违规)

如何使用WebRequest使用https访问SSL加密站点?

如果您只是想通过https(ssl)加载页面,这将有效。 如果您想查看证书,我建议使用完整的delgate方法

 ServicePointManager.ServerCertificateValidationCallback = ( ( sender , certificate , chain , sslPolicyErrors ) => true ); //allows for validation of SSL certificates 

或者使用完整的委托方法

 ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback( delegateHttpSsl ); private bool delegateHttpSsl(object obj, System.Security.Cryptography.X509Certificate c1, System.Security.Cryptography.X509Certifciates.X509Chain c2, SslPolicyErrors c3) { return true; }