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;
        }

 

C#中 HttpWebRequest和 webclient 的POST方法

上一篇:创建并使用Windows Azure虚拟机模板


下一篇:rest api设计的一般原则