1. 程式人生 > >C#模擬傳送http get、post請求的方式

C#模擬傳送http get、post請求的方式

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