1     public class XHttpRequest
  2     {
  3         //同步方式发起http get请求
  4         public string HttpGet(string url, string queryString)
  5         {
  6             string responseData = null;
  7 
  8             if (!string.IsNullOrEmpty(queryString))
  9             {
 10                 url += "?" + queryString;
 11             }
 12 
 13             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
 14             webRequest.Method = "GET";
 15             webRequest.ServicePoint.Expect100Continue = false;
 16             webRequest.Timeout = 20000;
 17 
 18             StreamReader responseReader = null;
 19 
 20             try
 21             {
 22                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
 23                 responseData = responseReader.ReadToEnd();
 24             }
 25             catch
 26             {
 27             }
 28             finally
 29             {
 30                 webRequest.GetResponse().GetResponseStream().Close();
 31                 responseReader.Close();
 32                 responseReader = null;
 33                 webRequest = null;
 34             }
 35 
 36             return responseData;
 37         }
 38 
 39         //同步方式发起http post请求
 40         public string HttpPost(string url, string queryString)
 41         {
 42             StreamWriter requestWriter = null;
 43             StreamReader responseReader = null;
 44 
 45             string responseData = null;
 46 
 47             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
 48             webRequest.Method = "POST";
 49             webRequest.ContentType = "application/x-www-form-urlencoded";
 50             webRequest.ServicePoint.Expect100Continue = false;
 51             webRequest.Timeout = 20000;
 52 
 53             try
 54             {             
 55                 //POST the data.
 56                 requestWriter = new StreamWriter(webRequest.GetRequestStream());
 57                 requestWriter.Write(queryString);
 58                 requestWriter.Close();
 59                 requestWriter = null;
 60 
 61                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
 62                 responseData = responseReader.ReadToEnd();
 63             }
 64             catch
 65             {
 66                 throw;
 67             }
 68             finally
 69             {
 70                 if (requestWriter != null)
 71                 {
 72                     requestWriter.Close();
 73                     requestWriter = null;
 74                 }
 75 
 76                 if (responseReader != null)
 77                 {
 78                     responseReader.Close();
 79                     responseReader = null;
 80                 }
 81 
 82                 webRequest.GetResponse().GetResponseStream().Close();
 83                 webRequest = null;
 84             }
 85 
 86             return responseData;
 87         }
 88 
 89         //同步方式发起http post请求,可以同时上传文件
 90         public string HttpPostWithFile(string url, string queryString, List<Parameter> files)
 91         {
 92             Stream requestStream = null;
 93             StreamReader responseReader = null;
 94             string responseData = null;
 95             string boundary = DateTime.Now.Ticks.ToString("x");
 96             url += '?' + queryString;
 97             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
 98             webRequest.ServicePoint.Expect100Continue = false;
 99             webRequest.Timeout = 20000;
100             webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
101             webRequest.Method = "POST";
102             webRequest.KeepAlive = true;
103             webRequest.Credentials = CredentialCache.DefaultCredentials;
104 
105             try
106             {
107                 Stream memStream = new MemoryStream();
108 
109                 byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
110                 string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
111 
112                 List<Parameter> listParams = HttpUtil.GetQueryParameters(queryString);
113 
114                 foreach (Parameter param in listParams)
115                 {
116                     string formitem = string.Format(formdataTemplate, param.Name, param.Value);
117                     byte[] formitembytes = Encoding.UTF8.GetBytes(formitem);
118                     memStream.Write(formitembytes, 0, formitembytes.Length);
119                 }
120 
121                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
122 
123                 string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: \"{2}\"\r\n\r\n";
124 
125                 foreach (Parameter param in files)
126                 {
127                     string name = param.Name;
128                     string filePath = param.Value;
129                     string file = Path.GetFileName(filePath);
130                     string contentType = HttpUtil.GetContentType(file);
131 
132                     string header = string.Format(headerTemplate, name, file, contentType);
133                     byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
134 
135                     memStream.Write(headerbytes, 0, headerbytes.Length);
136 
137                     FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
138                     byte[] buffer = new byte[1024];
139                     int bytesRead = 0;
140 
141                     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
142                     {
143                         memStream.Write(buffer, 0, bytesRead);
144                     }
145 
146                     memStream.Write(boundarybytes, 0, boundarybytes.Length);
147                     fileStream.Close();
148                 }
149 
150                 webRequest.ContentLength = memStream.Length;
151 
152                 requestStream = webRequest.GetRequestStream();
153 
154                 memStream.Position = 0;
155                 byte[] tempBuffer = new byte[memStream.Length];
156                 memStream.Read(tempBuffer, 0, tempBuffer.Length);
157                 memStream.Close();
158                 requestStream.Write(tempBuffer, 0, tempBuffer.Length);
159                 requestStream.Close();
160                 requestStream = null;
161 
162                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
163                 responseData = responseReader.ReadToEnd();
164             }
165             catch (Exception ex)
166             {
167             }
168             finally
169             {
170                 if (requestStream != null)
171                 {
172                     requestStream.Close();
173                     requestStream = null;
174                 }
175 
176                 if (responseReader != null)
177                 {
178                     responseReader.Close();
179                     responseReader = null;
180                 }
181 
182                 webRequest.GetResponse().GetResponseStream().Close();
183                 webRequest = null;
184             }
185 
186             return responseData;
187         }
188     }
posted on 2012-07-26 12:40  CodeBase  阅读(772)  评论(0编辑  收藏  举报