後臺傳送Http請求
get方式傳送請求:
// 建立http請求 HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create(strWebUrl); // 指定請求型別 httpWeb.Method = "get"; // 接收伺服器響應結果 using (WebResponse wp = httpWeb.GetResponse()) { // 讀出返回結果流 using (StreamReader reader = new StreamReader(wp.GetResponseStream())) { ...... } }
post傳送請求:
// 傳送請求 HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create(strCreateMenuUrl); // 指定請求型別 httpWeb.Method = "Post"; // 將要Post給伺服器的資料寫入請求建立的流中 using (Stream stream = httpWeb.GetRequestStream()) { stream.Write(Encoding.UTF8.GetBytes(menuJson), 0, Encoding.UTF8.GetBytes(menuJson).Length); } // 接收伺服器響應結果 using (WebResponse wp = httpWeb.GetResponse()) { // 讀出返回結果流 using (StreamReader reader = new StreamReader(wp.GetResponseStream())) { ....... } }
轉載原文:
平時用瀏覽器看網頁的時候,點選一下submit按鈕的時候其實就是給伺服器傳送了一個POST請求。但是如何在自己的C#程式裡面實現類似的功能呢?本文給出了一個簡單的範例,可以實現類似的和web server之間的POST通訊。通過程式傳送POST的過程如下所示:
1. 建立httpWebRequest物件
HttpWebRequest不能直接通過new來建立,只能通過WebRequest.Create(url)的方式來獲得。
WebRequest是獲得一些列應用層協議物件的一個統一的入口(工廠模式),它根據引數的協議來確定最終建立的物件型別。所以我們的程式裡面有一個對返回物件的型別進行測試的過程。
2.
這個過程提供一些http請求常用的屬性:agentstring,contenttype等其中agentstring比較有意思,它是用來識別你用的瀏覽器名字的,通過設定這個屬性你可以欺騙伺服器你是一個IE,firefox甚至是mac裡面的safari。很多認真設計的網站都會根據這個值來返回對使用者瀏覽器特別優化過的程式碼。
3. 附加要POST給伺服器的資料到HttpWebRequest物件
附加POST資料的過程比較特殊,它並沒有提供一個屬性給使用者存取,需要寫入HttpWebRequest物件提供的一個stream裡面。
4. 讀取伺服器的返回資訊
讀取伺服器返回的時候,要注意返回資料的encoding。如果我們提供的解碼型別不對會造成亂碼。比較常見的是utf-8和gb2312之間的混淆,據我測試,國內的主機一般都是gb2312編碼的。一般設計良好的網站會把它編碼的方式放在返回的http header裡面,但是也有不少網站根本沒有,我們只能通過一個對返回二進位制值的統計方法來確定它的編碼方式。
/// <summary> /// /// </summary> /// <param name="url">地址</param> /// <param name="method">方法</param> /// <param name="param">json引數</param> /// <returns></returns> public static string WebServiceApp(string url, string method, string param) { //轉換輸入引數的編碼型別,獲取bytep[]陣列 byte[] byteArray = Encoding.UTF8.GetBytes("json=" + param); //初始化新的webRequst //1. 建立httpWebRequest物件 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url + "/" + method)); //2. 初始化HttpWebRequest物件 webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = byteArray.Length; //3. 附加要POST給伺服器的資料到HttpWebRequest物件(附加POST資料的過程比較特殊,它並沒有提供一個屬性給使用者存取,需要寫入HttpWebRequest物件提供的一個stream裡面。) Stream newStream = webRequest.GetRequestStream();//建立一個Stream,賦值是寫入HttpWebRequest物件提供的一個stream裡面 newStream.Write(byteArray, 0, byteArray.Length); newStream.Close(); //4. 讀取伺服器的返回資訊 HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string phpend = php.ReadToEnd(); return phpend; }