首页 > 代码库 > 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", "application/x-www-form-urlencoded");            //发送的字符转为字节流            byte[] sendData = http://www.mamicode.com/Encoding.GetEncoding("utf-8").GetBytes(postData.ToString());            //长度            myWebClient.Headers.Add("ContentLength", sendData.Length.ToString());            //提交            byte[] recData = http://www.mamicode.com/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;        }

 

C#中 HttpWebRequest和 webclient 的POST方法