1. 程式人生 > >C#學習 【HttpClient學習】

C#學習 【HttpClient學習】

簡單的說幾句:由於之前一直做的是PC端的APP,沒有做過WEB方面的專案,一直對類似搶票軟體這樣的程式很感興趣,很想弄一款搶手機啊,秒殺啊的APP出來。之前做過一個類似按鍵精靈功能的APP,就是不停的模擬滑鼠點選網頁中的按鈕。什麼時候能夠模擬瀏覽器來發送請求呢,一直沒弄明白。現在C#中的HttpClient(微軟文件)可以實現這樣的功能了。。。當然學習它還是為了專案,專案中有需要個裝置通訊,採用的是HTTP的方式。

根據微軟的文件說明使用該介面,必須要.NET 4.5 中的System.Net.Http.dll,所以執行時估計還要裝Microsoft.NET Framework 4.5(可能有別的辦法)

主要的方法 GET 和 POST
1.GetAsync方法

HttpClient httpClient = new HttpClient();
HttpResponseMessage response =new HttpResponseMessage();
try
{
    //Get
    response = httpClient.GetAsync(strUrl).Result;
    strTemp = response.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
} 

2.PostAsync方法(附帶XML格式的資料)

HttpClient httpClient = new HttpClient();
HttpResponseMessage response =new HttpResponseMessage();
string xmlData = @"要附帶的資料。。。";
try
{
    StringContent postContent = new StringContent(xmlData);
    postContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
    response = httpClient.PostAsync(strUrl,postContent).Result;

    strTemp = response
.Content.ReadAsStringAsync().Result; } catch (Exception ex) { }

以上查詢度娘,大把大把的例子。strTemp 返回的就是你訪問頁面返回的資料,根據strTemp 來取需要的資料,這麼可以用的c#學習【XML處理】(可能會有這麼一篇吧)讀寫XML,不經感慨C#封裝的功能真特麼豐富啊。

遇到的問題:
1. 用get或者post 一訪問就異常,不知道什麼原因 ex.Message,文言都是“出現一個或多個錯誤”,說了等於沒說。後來百度 查到應該檢視ex.InnerException中的提示錯誤,這裡面說的比較詳細,一看就明白。
什麼網址不對,伺服器關閉,基礎連線已經關閉: 未能為 SSL/TLS 安全通道建。。。,看異常再處理。

這邊說下最後一個錯誤吧,因為專案中用的裝置開啟後,聲音吵的一比,震的耳朵疼,所以剛開始沒連裝置,就用假資料吭哧吭哧的編碼,最後打算跑下真資料時,開機後沒有一個能夠URL能夠訪問的,都是異常。整個辦公室吵的不行啊,又不知道為什麼異常,整個人都不好了。。。後來發現之前測試的網頁都是http://的,而裝置的介面都是https://,https://的URL需要驗證證書的,所以一直出現SSL的問題。
解決辦法:在呼叫POST或GET方法前,呼叫下Util.SetCertificatePolicy();

//取消證書限制
public static class Util
{
   public static void SetCertificatePolicy()
   {
       ServicePointManager.ServerCertificateValidationCallback
                  += RemoteCertificateValidate;
   } 
   private static bool RemoteCertificateValidate(
      object sender, X509Certificate cert,
       X509Chain chain, SslPolicyErrors error)
   {
       return true;
   }
}