首页 > 编程语言 >C#POST请求获取cookie,通过url下载文件

C#POST请求获取cookie,通过url下载文件

时间:2023-02-08 13:46:02浏览次数:36  
标签:cookies string C# respContent request url cookie new

/// <summary>
/// 请求下载文件
/// </summary>
/// <param name="fileName">传进来的文件名</param>
/// <returns></returns>
public ActionResult GetStream(string fileName= "123.xls",string url="")
{
//获取cookie
string cookies= Getcoookie();

//本地临时文件夹
string tempFile = Path.GetTempPath();
//拼接
tempFile =Path.Combine(tempFile, fileName);
try
{

using (var client = new WebClient())
{
CookieContainer cookie = new CookieContainer();
//请求头带cookie过去
client.Headers.Add(HttpRequestHeader.Cookie, cookies);
//保存到本地文件
client.DownloadFile(url, tempFile);

//Console.WriteLine("using" + tempFile);

//给浏览器返回文件流

return File(FileToStream(tempFile, true), "application/octet-stream", fileName);

}
}
catch (Exception ex)
{
return Json("");
}
}

/// <summary>
/// 读取下载好的文件,并且删除
/// </summary>
/// <param name="fileName"></param>
/// <param name="isDelete"></param>
/// <returns></returns>
public static Stream FileToStream(string fileName, bool isDelete = false)
{
//读取文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
Stream stream = new MemoryStream(bytes);
//删除
if (isDelete)
{
System.IO.File.Delete(fileName);

}
//返回文件流
return stream;
}
/// <summary>
/// 获取cookie
/// </summary>
/// <returns></returns>
public static string Getcoookie()
{

string cookies = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.4399.com/action指定向");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = 10000;
request.AllowAutoRedirect = false;

//表单传递的账号密码
string builder = "User=123&password=123456789";

byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
request.ContentLength = data.Length;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}

var cookie = new CookieContainer();
request.CookieContainer = cookie;
request.CookieContainer.SetCookies(request.RequestUri, cookies);//将登录的cookie值赋予此次的请求。
HttpWebResponse respContent = (HttpWebResponse)request.GetResponse();

// string html = new StreamReader(respContent.GetResponseStream()).ReadToEnd();

//cookie拼接
if (respContent.Cookies.Count > 0)
{
for (int i = 0; i < respContent.Cookies.Count; i++)
{
cookies += respContent.Cookies[i].Name+"="+ respContent.Cookies[i].Value;
if (i != respContent.Cookies.Count - 1)
{
cookies += ";";
}
}
}
return cookies;
}

标签:cookies,string,C#,respContent,request,url,cookie,new
From: https://www.cnblogs.com/MrHLin/p/17101419.html

相关文章

  • ReentrantLock 源码解析
    ReentrantLock源码解析ReentrantLock类描述一种可重入互斥锁Lock,与使用synchronized方法和语句访问的隐式监控锁具有相同的基本行为和语义,但具有扩展的功能。一......
  • javaScript ES6 - call,apply,bind 修改this指向,开启严格模式
    1.call与applycall与apply都是执行一次修改的方法,不过apply的第二个参数为数组格式//构造函数functionHuman(id,name){this.id=id;this.name=name;}//方法f......
  • springmvc启动需要的基础依赖
    <properties><spring.version>5.2.8.RELEASE</spring.version></properties><dependencies><!--此依赖会关联引用Spring中的所有基础ja......
  • GMAC网卡调试分析
    GMAC网卡调试分析目录GMAC网卡调试分析环境描述MIIMIIRMIIGMIIRGMIISGMIIGMAC网卡信息获取方法获取GMAC网卡信息查看PHY工作接口模式获取PHYIDMAC芯片读写MAC寄存器的方......
  • ruoyi-cloud微服务在Linux中使用docker-compose部署
    ruoyi-cloud微服务docker-compose部署前置说明**在本地安装虚拟机请务必给虚拟机分配足够内存!!!,**否则服务可能会在启动中挂掉分配4G内存我这边是够的,具体需要分配......
  • 查看chrome & Chromium 详细版本、安装路径、用户路径
    在浏览器地址栏直接输入:chrome://version/ -  -参考:https://www.jb51.net/article/204348.htm......
  • P4870 [BalticOI 2009 Day1]甲虫 题解
    题目链接简要题意在一个数轴上有\(n\)滴露水,每滴露水初始水量为\(m\),每秒会蒸发一滴水,一个甲虫初始在原点,速度为1,水能瞬间喝完,问它最多能喝到几滴水。题目分析对于......
  • 693~694servlet_urlpartten配置 AND HTTP概述
    Servlet相关配置1.Urlpartten:Servlet访问路径1.一个Servlet可以定义多个访问路径:@WebServlet({"/访问1","/"访问2,"/访问3"})2.路径定义的规则:......
  • vue+element DatePicker日期选择器封装(可自定义快捷选择时间)
    前言今天封装了一个DatePicker日期选择器,发现带快捷选择的不太好封装,我需要在不同的地方快捷选择不同的时间,并且快捷显示的时间是从昨天开始,在网上找了一圈都没找到便自己......
  • VS和.NET版本与C#版本对应关系
    转载:https://www.cnblogs.com/webapi/p/15204940.html.NET是一个免费的跨平台开放源代码开发人员平台,用于生成许多不同类型的应用程序一、C#与.Net版本关系C#版本.N......