在Windows Phone系統中,通過HttpWebRequest類可以很容易的發送網路請求,獲取網路資料。HttpWebRequest是非同步作業,不會堵塞主執行緒。
 
1.通過HttpWebRequest.CreateHttp()方法可以創建一個HttpWebRequest,下面代碼簡單實現發送一個GET請求。
 
HTTPGet

public void HTTPGet()
{
try
{
//請求位址
String url = "HTTP://www.2cto.com/ ";
//創建WebRequest類
HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url));

//佈建要求方式GET POST
request.Method = "GET";

//返回應答請求非同步作業的狀態
request.BeginGetResponse(responseCallback, request);
}
catch (WebException e)
{
//網路相關異常處理
}
catch (Exception e)
{
//異常處理
}
}

 
2.應答資料接收部分。
 
responseCallback

private void responseCallback(IAsyncResult result)
{
try
{
//獲取非同步作業返回的的資訊
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
//結束對 Internet 資源的非同步請求
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
//解析應答頭
//parseRecvHeader(response.Headers);
//獲取請求體資訊長度
long contentLength = response.ContentLength;

//獲取應答碼
int statusCode = (int)response.StatusCode;
string statusText = response.StatusDescription;

//應答頭資訊驗證
using (Stream stream = response.GetResponseStream())
{
//獲取請求資訊
StreamReader read = new StreamReader(stream);
string msg = read.ReadToEnd();
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
textBlock1.Text = msg;
});
}

}
catch (WebException e)
{
//連接失敗
}
catch (Exception e)
{
//異常處理

}

}

  通過HttpWebResponse可以獲取返回的資料,在獲取資料後,要想將資料顯示到介面中,這裡要主要一個問題。由於 HttpWebRequest是非同步作業,所以這裡應該有一個執行緒來處理網路,大家都知道Windows Phone中線上程裡是不能操作UI的,這個需要交個UI主執行緒來處理,所以代碼中用到了 Deployment.Current.Dispatcher.BeginInvoke。
  3.上面是簡單的GET請求,POST請求和GET請求相比,多了一個發送請求體的操作過程。以下代碼為POST請求,應對部分操作函數仍然是responseCallback。
HTTPPost

public void HTTPPost()
{
try
{
//請求位址
String url = "HTTP://www.2cto.com/ ";
//創建WebRequest類
HttpWebRequest request = HttpWebRequest.CreateHttp(new Uri(url));

//佈建要求方式GET POST
request.Method = "POST";

//返回應答請求非同步作業的狀態
request.BeginGetRequestStream(requestCallback, request);
}
catch (WebException e)
{
//網路相關異常處理
}
catch (Exception e)
{
//異常處理
}
}

private void requestCallback(IAsyncResult result)
{
try
{
//獲取非同步作業返回的的資訊
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
//結束對 Internet 資源的非同步請求
StreamWriter postStream = new StreamWriter(request.EndGetRequestStream(result));
postStream.WriteLine("作者:宇之樂");
postStream.WriteLine("");

//返回應答請求非同步作業的狀態
request.BeginGetResponse(responseCallback, request);
}
catch (WebException e)
{
//異常處理

}
catch (Exception e)
{
//異常處理

}
}

 

創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()