2011年10月6日 星期四

Visual 2010 C# 自動登入遠端 IP Camera

    今天又接到一個新任務, 為 IP Camera 撰寫遠端監控程式, 現在 IP Camera 無論是有線無線的使用量都很大,要能連接 IP Camera 最先要能解決的就是自動登入,目前多半的 IP Camera 都有一個小型的 Web Server 方便大家遠端設定及連線,所以要設定應該就是用 Http Web 的 Protocol 來聯就可以。

我目前要測的這一款 IP Camera,還可以遠端遙控及夜視功能,不過問題一步一步解決,下面就是我要處理的 IP Camera:

Wifi IP Camera
    首先先連進去看Ip Camera 自己用瀏覽器如何顯示畫面,並找出產生圖像的位置,這台 Ip Camera 是產生 MJPEG,所以應該可以假設產生圖樣的程式是 *.cgi,果然沒錯用 Chrome 瀏覽器中的檢查元素就找到了:

找到負責圖像顯示的videostream.cgi

    先打開 Visual 2010 C#,開啟一個 Window Application Form,為了方便測試,先設一個按鈕及文字方塊用來顯示傳回的資訊,HttpWebRequest 是定義在 System.Net 中,所以要先加一行:

           Using System.Net;

接著定義:
           HttpWebRequest req;
           HttpWebResponse resp = null;
           Uri url = new Uri("http://192.168.1.***/videostream.cgi"); //*** 是為隱藏 IP 位置
           req = (HttpWebRequest)HttpWebRequest.Create(url); //Create HttpWebRequest
再來就是 Create HttpWebRespond 了,不過任何有關連線的程式多半都會產生意外斷線或連不上,所以一定要準備處理例外 Exception,我是一個懶人,所以每次都先將 try .... catch .... finally 套入,以後再填入程式碼,
            try
            {
                resp = (HttpWebResponse)req.GetResponse();
            }
            catch (WebException wex)
            {
            }
            finally
            {
            }
再把 WebException 顯示在 Textbox中,立即測試就傳回:

傳回未經授權 401

傳回這個錯誤很正常,因為我還沒加入任何認證的資訊, 401 是未經授權,404 是找不到,這些錯誤訊息很容易在網路上找到,還有一個是無法連線到遠端伺服器,如果一切正常傳會來的應該是 200 OK , 因為會有 "無法連線到遠端伺服器" 的可能性,所以應先加上逾時值 (Timeout):

req.Timeout = 50;

設定 Timeout 後,如超過設定值會傳回 "作業逾時"。


大框架有了,接著就是要把認證的資料放到 HttpWebRequest 中,我是使用 credential 的方式放入的:
req.Credentials = new NetworkCredential("user", "password");

再次測試連線傳回了 "OK",這下簡單的登入算是完成了,不過這樣的 HTTP Request Header 對一些嚴謹的 WEB Server可是不夠的。到這又要暫告一段落,因為又要去談案子。