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