C#登录https网站并下载文件

本文深入探讨了如何实现HTTPS连接并跳过证书验证,保持登录会话,以及如何从响应中提取并使用设置的Cookie。同时,介绍了如何通过流的方式下载文件,并解析文件名,最终将文件内容保存到本地。

1.登录https

if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    request = WebRequest.Create(url) as HttpWebRequest;
    request.ProtocolVersion = HttpVersion.Version10;
}
else
{
    request = WebRequest.Create(url) as HttpWebRequest;
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
    return true; //总是接受
}

本来想着https的连接需要证书的,原来还可以跳过证书的验证,直接返回true就行了,实践证明可以连接成功。 HTTPS连接最初的若干毫秒

2.继续访问

完成登录后,要保持这个session,查看response.Headers["Set-Cookie"],可以看到cookie里的session信息,只要把这些cookie内容在下一次请求时带上就行了。

请求时cookie的转换代码:

string cookieString = response.Headers["Set-Cookie"];
CookieCollection cookies = new CookieCollection();
Regex re = new Regex("([^;,]+)=([^;,]+); path=([^;,]+); expires=([^;,]+)", RegexOptions.IgnoreCase);//视具体内容进行调整
foreach (Match m in re.Matches(cookieString))
{
    Cookie c = new Cookie(m.Groups[1].Value, m.Groups[2].Value);
    c.Domain = "yourDomain";//放你要访问网站的域名
    cookies.Add(c);
}

3.下载文件

请求的是一个下载链接,另存为的文件名,在response.Headers里。通过字符串操作把它提取出来。

文件内容要通过流的方式,把它读出来,保存成文件。

Stream stream = response.GetResponseStream();
FileStream fs = new FileStream(file, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
BinaryReader br = new BinaryReader(stream);
 
byte[] nbytes = new byte[2048];
int nReadSize = 0;
nReadSize = br.Read(nbytes, 0, 2048);
while (nReadSize > 0)
{
      bw.Write(nbytes, 0, nReadSize);
      nReadSize = br.Read(nbytes, 0, 2048);
}
bw.Close();
br.Close();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值