C#中 HttpWebRequest和 webclient 的POST方法

WebClient:
1.post字符串
  public string SendField_wc(string URL,string CookieData, string postData)
        {
            WebClient myWebClient = new WebClient();
            myWebClient.Headers.Add("Cookie", CookieData);
            //添加文章
            myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            //发送的字符转为字节流
            byte[] sendData = Encoding.GetEncoding("utf-8").GetBytes(postData.ToString());
            //长度
            myWebClient.Headers.Add("ContentLength", sendData.Length.ToString());
            //提交
            byte[] recData = myWebClient.UploadData(URL, "POST", sendData);
            //显示返回值注意编码
            return(Encoding.GetEncoding("utf-8").GetString(recData));

      }
2.post文件
 public string SendFile_wc(string URL, string CookieData, string FilePath)
        {
            WebClient myWebClient = new WebClient();
            myWebClient.Headers.Add("Cookie", CookieData);
            byte[] responseArray = myWebClient.UploadFile(URL, "POST",FilePath);
            string resmsg = Encoding.GetEncoding("utf-8").GetString(responseArray);
            return resmsg;
    }

HttpWebRequest:
cookie处理方法:
 private CookieContainer GetUriCookieContainer(Uri uri, string cookieData)
        {
            //定义CookieCollection 对象的集合提供容器
            CookieContainer cookies = null;
            //判断是否存在字符串
            if (cookieData.Length > 0)
            {
                //实例化CookieCollection对象
                cookies = new CookieContainer();
                //分解出cookie字符串
                string[] cooks = cookieData.Split(‘;‘);
                //遍历所有数组
                for (int i = 0; i < cooks.Length; i++)
                {
                    //将字符中的逗号替换
                    cooks[i] = cooks[i].Replace(",", "%2C");
                    //设置cookie信息
                    cookies.SetCookies(uri, cooks[i]);
                }
            }
            return cookies;
        }

1.post字符串
 public string SendField_wbr(string URL, string CookieData, string postData)
        {
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
                //设置cookie
                Uri uri = new Uri(URL);
                request.CookieContainer = GetUriCookieContainer(uri, CookieData);

                request.ContentType = "application/x-www-form-urlencoded";
                request.Timeout = 30000;
                request.Method = "POST";
                request.ContentLength = byteArray.Length;
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(byteArray, 0, byteArray.Length);
                requestStream.Close();
                HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
                String sResult = reader.ReadToEnd();
                reader.Close();
                return sResult;
            }
            catch (Exception ex)
            {
                return "<error>" + ex.Message + "</error>";
            }
        }
2.post文件 (参考:http://www.cnblogs.com/greenerycn/archive/2010/05/15/csharp_http_post.html)
 private string SendFile_wbr(string url, int timeOut, string fileKeyName, string filePath, NameValueCollection stringDict, string CookieData)
        {

            string responseContent;
            var memStream = new MemoryStream();
            var webRequest = (HttpWebRequest)WebRequest.Create(url);
            //设置Cookie信息???
            Uri uri = new Uri(url);
            webRequest.CookieContainer = GetUriCookieContainer(uri, CookieData);
            // 边界符
            var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
            // 边界符
            var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
            var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            // 最后的结束符
            var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

            // 设置属性
            webRequest.Method = "POST";
            webRequest.Timeout = timeOut;
            webRequest.ContentType = "multipart/form-data; boundary=" + boundary;

            // 写入文件
            const string filePartHeader =
                "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                 "Content-Type: application/octet-stream\r\n\r\n";
            var header = string.Format(filePartHeader, fileKeyName, filePath);
            var headerbytes = Encoding.UTF8.GetBytes(header);

            memStream.Write(beginBoundary, 0, beginBoundary.Length);
            memStream.Write(headerbytes, 0, headerbytes.Length);

            var buffer = new byte[1024];
            int bytesRead; // =0

            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                memStream.Write(buffer, 0, bytesRead);
            }

            // 写入字符串的Key
            var stringKeyHeader = "\r\n--" + boundary +
                                   "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                                   "\r\n\r\n{1}\r\n";

            foreach (byte[] formitembytes in from string key in stringDict.Keys
                                             select string.Format(stringKeyHeader, key, stringDict[key])
                                                 into formitem
                                                 select Encoding.UTF8.GetBytes(formitem))
            {
                memStream.Write(formitembytes, 0, formitembytes.Length);
            }

            // 写入最后的结束边界符
            memStream.Write(endBoundary, 0, endBoundary.Length);

            webRequest.ContentLength = memStream.Length;

            var requestStream = webRequest.GetRequestStream();

            memStream.Position = 0;
            var tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();

            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
            requestStream.Close();

            var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();

            using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
                                                            Encoding.GetEncoding("utf-8")))
            {
                responseContent = httpStreamReader.ReadToEnd();
            }

            fileStream.Close();
            httpWebResponse.Close();
            webRequest.Abort();

            return responseContent;
        }
时间: 2024-10-09 23:51:00

C#中 HttpWebRequest和 webclient 的POST方法的相关文章

C# HttpWebRequest和 webclient 的POST方法

WebClient:1.post字符串 public string SendField_wc(string URL,string CookieData, string postData) { WebClient myWebClient = new WebClient(); myWebClient.Headers.Add("Cookie", CookieData); //添加文章 myWebClient.Headers.Add("Content-Type", &quo

C#中HttpWebRequest与HttpWebResponse的使用方法

关键字:C# HttpWebRequest HttpWebResponse HTTP GET POST 请求 这个类是专门为HTTP的GET和POST请求写的,解决了编码,证书,自动带Cookie等问题.C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地址获取网页信息   先来看一下代码get方法 public static string GetUrltoHtml(string Url,string ty

浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

1.第一招,根据URL地址获取网页信息get方法 public static string GetUrltoHtml(string Url,string type) { try { System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url); // Get the response instance. System.Net.WebResponse wResp = wReq.GetResponse(); System.IO.Stre

HttpWebRequest和WebClient的区别

HttpWebRequest和WebClient的区别(From Linzheng): 1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();2,其Method指定了请求类型,这里用的GET,还有POST:也可以指定ConentType;3,其请求的Uri必须是绝对地址;4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法: 5,WebClient 方式使用基于事件的异步编

Linux中用HttpWebRequest或WebClient访问远程https路径

要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo mozroots --import --ask-remove (独立版是:sudo /usr/jexus/mozroots --import --ask-remove) 2,在web程序中,在运行https请求之前的某个地方,比如Global.asax的Application_Start方法中添加

C#中HttpWebRequest的用法详解

HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的.请注意,HttpWebRequest对象不是利用new关键字通过构 造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的.另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要.接下来调用 HttpWebRequest.G

C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉

原文链接:http://www.crifan.com/csharp_httpwebrequest_getrequeststream_dead_hang_low_efficiency/ [已解决]C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉 [问题] C#中,提交对应的POST类型http请求之前,会执行: Stream postDataStream = req.GetRequestStream(); 然后填充对应的post数据,再提交http的

Eclipse ADT中的logcat不显示解决方法

Eclipse ADT中的logcat不显示解决方法: 1.在Eclipse界面中找到DDMS,然后找到device选项卡,在这个选项卡中选择reset adb,如果不行尝试方法2: 2.不用关闭eclipse和模拟器,在Android SDK的tools目录下有个 ddms.bat 批处理文件,运行这个文件可以启动DDMS,同时这里面有logcat,可以显示信息: 3.以上方法都不行,最终杀手锏就是重启eclipse,重启模拟器,记得在任务管理器中关闭adb.exe,这时应该就可以了. 4.用

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener