C# Webbrowser中发送http请求,上传文件

要搞一个项目,项目中需要用excel于PDM系统进行集成,用户点击按钮可以将正在编辑的excel上传到PDM系统。之前从来没搞过Web,也着实研究了两天才解决这个问题。之前在网上搜索过一些文章,讲怎么样通过http协议传送数据,大部分都是用WebClient和WebRequest实现的,因为登陆PDM系统需要用户名密码验证,如果没有用户名密码验证会抛出无权限的异常,尝试了两次之后还是放弃了。之后发现webbrowser里面有传送数据的功能,而且只要是通过webbrower登陆过,用户名和密码会被记录近cookie里面,之后再登陆这个域名就不需要身份验证了,然后通过Fiddler截获网页传输的HTTP请求,尝试了几次终于成功上传了数据,其实就是在组拼http头和体,既然之前没有搜到过webbrower上传的文章,那我就来写一下吧,希望能对有同样需要的人一些帮助。

        public void UpLoadFile(string file_path, string file_type, params object[] datas)
        {
            try
            {
                string content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//传输的文件的类型,如果是.xlsx需要把类型设置成这个,如果是txt则是text/plain,其他文件类型要通过Fiddler截获http请求就知道了
                FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(fs);
                string str_file_data = sr.ReadToEnd();//读取要上传的文件内容
                sr.Close();
                fs.Close();
                fs.Dispose();
                fs = null;


                string send_str = "";//发送体,拼接发送体
                if (datas.Length == 0)
                {
                    send_str = "-----------------------------7de11823250caa\r\nContent-Disposition: form-data; name=\"file\"; filename=\"" + file_path + "\"\r\nContent-Type: " + content_type + "\r\n\r\n" + str_file_data + "\r\n\r\n\r\n\r\n-----------------------------7de11823250caa\r\nContent-Disposition: form-data; name=\"excel_type\"\r\n\r\n" + file_type.ToString() + "\r\n-----------------------------7de11823250caa\r\nContent-Disposition: form-data; name=\"submit\"\r\n\r\n??????????????????\r\n-----------------------------7de11823250caa--\r\n";
                }
                else
                {
                    send_str = "-----------------------------7de11823250caa\r\nContent-Disposition: form-data; name=\"file\"; filename=\"" + file_path + "\"\r\nContent-Type: " + content_type + "\r\n\r\n" + str_file_data + "\r\n\r\n\r\n\r\n-----------------------------7de11823250caa\r\nContent-Disposition: form-data; name=\"excel_type\"\r\n\r\n" + file_type.ToString() + "\r\n-----------------------------7de11823250caa\r\n";
                    int i=0;
                    foreach (object ob in datas)
                    {
                        send_str = send_str+"Content-Disposition: form-data; name=\""+"data"+i.ToString()+"\"\r\n\r\n"+ob.ToString()+"\r\n";
                        i++;
                    }
                    send_str = send_str + "-----------------------------7de11823250caa--\r\n";
                }
                
                byte[] btPost = new byte[] { };
                btPost = System.Text.Encoding.ASCII.GetBytes(send_str);//将发送体转化为byte


                //初始化发送头
                string header = "Content-Type: multipart/form-data; boundary=---------------------------7de11823250caa\r\nContent-Length: " + btPost.Length + "\r\nConnection: Keep-Alive\r\nUA-CPU: AMD64\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E; Media Center PC 6.0)\r\nPragma: no-cache\r\nAuthorization: Basic b3JnYWRtaW46Y2hhbmdlbWU=\r\n\r\n";


                //通过Navigate发送数据
                webBrowser1.Navigate(URL, null, btPost, header);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


        }

你可能感兴趣的:(c#)