WebClient 请求 https 页面出错:未能创建 SSL/TLS 安全通道

oldhunter 2017-09-12 12:12:36
下面这个地址,用 WebClient 直接访问不行,浏览器可以打开。哪位同学,有空帮我看看。

https://www.cruisecheap.com/cruise-lines/crystal-cruises.html


提示错误:请求被中止: 未能创建 SSL/TLS 安全通道。

参考了网上的文章:https://q.cnblogs.com/q/89507/

设置 ServicePointManager.SecurityProtocol 后,提示:远程服务器返回错误: (416) Requested Range Not Satisfiable。

这是代码:

private void btnRequest_Click(object sender, EventArgs e)
{
/*
*
请求被中止: 未能创建 SSL/TLS 安全通道,参考帖子:https://q.cnblogs.com/q/89507/

问题已经解决, 可以在同一个解决方案下, 新建一个类库(或应用程序),使这个类库 使用Framwork 4.0 或 Framwork4.5 (CLR 4.0) ,
这样就可以在此类库中使用
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
解决此问题;
最后,在原来项目中 调用此类库中的方法 ,获取结果。
*/

try
{
WebClient web = new WebClient();

web.Encoding = Encoding.UTF8;
//txtHtml.Text = web.DownloadString("https://q.cnblogs.com/q/89507/"); // 测试成功

web.Headers.Add(HttpRequestHeader.Accept, "*/*");
web.Headers.Add(HttpRequestHeader.Accept, "gzip, deflate");
web.Headers.Add(HttpRequestHeader.Accept, "zh-cn");
web.Headers.Add(HttpRequestHeader.Accept, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36");
//web.Headers.Add(HttpRequestHeader.Range, "1-100000");

//ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy(); // for https
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

//
// 不设置 ServicePointManager.SecurityProtocol 提示:请求被中止: 未能创建 SSL/TLS 安全通道
// 设置后,提示:远程服务器返回错误: (416) Requested Range Not Satisfiable。
//
txtHtml.Text = web.DownloadString("https://www.cruisecheap.com/cruise-lines/crystal-cruises.html");
}
catch (Exception ex)
{
txtHtml.Text = ex.Message;
}
}
...全文
3744 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wq1282 2018-08-20
  • 打赏
  • 举报
回复 1


//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
//初始化对像,并设置请求的URL地址
request = (HttpWebRequest)WebRequest.Create(item.URL);


/// <summary>
/// 回调验证证书问题
/// </summary>
/// <param name="sender">流对象</param>
/// <param name="certificate">证书</param>
/// <param name="chain">X509Chain</param>
/// <param name="errors">SslPolicyErrors</param>
/// <returns>bool</returns>
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }

花下泥 2017-09-12
  • 打赏
  • 举报
回复
oldhunter 2017-09-12
  • 打赏
  • 举报
回复
引用 1 楼 qq_26433213 的回复:
可能是证书的问题 http://blog.csdn.net/icbc_ljt/article/details/52985584
X509Certificate2 certificate = new X509Certificate2(Properties.Resources.client, Properties.Resources.httpsKey8843); 去哪里找到证书 httpsKey8843? 为什么IE可以正常访问呢?

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧