C#模擬傳送http get、post請求的方式
阿新 • • 發佈:2019-01-25
1、WebRequest
同步方式:
/// <summary> /// 向指定URL發起請求(可用於遠端傳送資料) /// </summary> /// <param name="url"> /// <param name="data">傳送的資料 /// <param name="method"> /// <returns></returns> public static String RequestUrl(String url, byte[] data, String method = "POST") { try { WebRequest request = WebRequest.Create(url); request.Method = method; request.ContentType = "application/x-www-form-urlencoded"; if (data != null && data.Length > 0) { request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); newStream.Write(data, 0, data.Length); newStream.Close(); } else { request.ContentLength = 0; } WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); MemoryStream ms = new MemoryStream(); long ChunkSize = 1024; byte[] buffer = new byte[ChunkSize]; long dataLengthToRead = response.ContentLength;//獲取響應資料的總大小 while (dataLengthToRead > 0) { int lengthRead = stream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//讀取的大小 ms.Write(buffer, 0, lengthRead); dataLengthToRead = dataLengthToRead - lengthRead; } stream.Close(); response.Close(); string responseText = Encoding.UTF8.GetString(ms.ToArray()); return responseText; } catch (Exception ex) { return ex.Message; } }
非同步方式:
private void Button_Click(object sender, RoutedEventArgs e) { string baseUri =String.Format("http://localhost:49280/Images/{0}.jpg",this.numTextBox.Text.Trim()); HttpWebRequest request =(HttpWebRequest) WebRequest.Create(baseUri); request.Method = "GET"; request.BeginGetResponse(new AsyncCallback(ReadCallback), request); } public void ReadCallback(IAsyncResult asyc) { HttpWebRequest request = (HttpWebRequest)asyc.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyc); this.Dispatcher.BeginInvoke(() => { Stream stream = response.GetResponseStream(); BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(stream); this.image1.Source = bitmap; } ); }
2、WebClient
同步、非同步方式
<pre name="code" class="csharp"> using (var client = new WebClient()) { //傳送引數 NameValueCollection values = new NameValueCollection(); //請求路徑 string url = ConfigurationManager.AppSettings["MerUrl"]; //同步傳送form表單請求 byte[] retVal = client.UploadValues(url, "POST", values);
<span style="white-space:pre"> </span> //通過UploadValuesCompleted事件可繫結請求完成時的呼叫方法
//獲取返回結果
result = JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(retVal));
}