2010-05-26 67 views
1

我正在嘗試創建一個C#Winforms應用程序,該應用程序將自動將我登錄到網站並下載數據。具體來說,我想讓我的應用程序自動登錄到我的網上銀行網站,登錄並下載我的交易記錄。我可以通過Web瀏覽器登錄並下載它來手動執行此操作。我正試圖自動化這一點。我知道我可能需要使用HttpWebRequest和HttpWebResponse。有沒有人有這樣的例子或我需要採取的步驟框架來完成這個?請記住它將是安全的站點(https),我將以某種方式收集會話信息並在會話期間保留會話信息。有什麼想法嗎?以編程方式自動化Web登錄

+1

我對這些願望沒有很高的期望。銀行在防止利用方面非常積極,而且他們擁有世界上所有的錢都可以投資。你應該拿起針織什麼的。試圖通過銀行網站安全性會更好地利用你的時間。 ;-) – 2010-05-26 22:07:47

+1

我不是想做非法或破解或任何事情。我只是想將我自己的金融交易下載到我的電腦上,這樣我就可以製作一個跟蹤我的支出的計劃。沒有什麼不同,那麼Microsoft Money或Quicken的功能 – Icemanind 2010-05-26 22:10:16

+0

我並不是暗示你是。我在說銀行不喜歡並且不管意圖如何積極地阻止這種用法。你不會在這裏找到快樂。無論如何,祝你好運。 – 2010-05-26 22:14:44

回答

3

看一看Selenium,與您可以自動化用戶和瀏覽器之間的交互序列。

雖然很多銀行正在轉向基於JavaScript的登錄表單來混淆密碼以防止木馬,但您可能很幸運能夠使用Web請求和登錄響應。見Citibank (AU)Westpac (AU)。可能很難規避您可能不得不手動登錄並使GreaseMonkey腳本自動執行下載。

出於利益的考慮,也值得對銀行木馬以及他們如何代表用戶處理自動操作進行研究。請參閱Zeus Banking Trojan

+0

Quicken等程序如何做?在加快時,我所要做的就是選擇我的銀行名稱,並以某種方式自動進行並提取我所有的交易歷史數據? – Icemanind 2010-05-26 22:19:09

+0

Quicken必須使用API​​,檢查你的銀行,看看這個API是公開的,還是隻允許被可信任的軟件使用(這是付費的軟件開發許可證) – blissapp 2010-05-26 22:21:31

+1

快速Google搜索後我沒有看到。我的猜測是,Quicken和銀行必須有某種談判協議,允許他們通過他們的軟件訪問銀行賬戶。 – Icemanind 2010-05-26 22:24:52

3
using System; 

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 
using System.IO; 

namespace testSSL 
{ 
    public partial class FormDownload : Form 
    { 
     private bool success; 
     private const string filename = "file.txt"; 
     private const string url_string = "https://some.url.com"; 
     private Uri url; 
    public FormDownload() 
    { 
     InitializeComponent(); 
     success = false; 
     url = new Uri(url_string); 
    } 

    public bool StartDownload() 
    { 
     this.ShowDialog(); 
     return success; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.Activate(); 

     progressBar1.Maximum = 100; 
     label1.Text = "Working"; 

     WebClient client = new WebClient(); 
     client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); 
     client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); 

     //possible fix for running on w2k 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

     string user="user", pass="pass"; 
     client.Credentials = new NetworkCredential(user, pass); 
     try 
     { 
      client.DownloadFileAsync(url, filename); 
     } 
     catch (Exception ue) 
     { 
      writeException(ue.Message); 
     } 

    } 

    void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      writeException(e.Error.Message); 
      success = false; 
     } 
     else 
     { 
      label1.Text = "Done"; 
      System.Threading.Thread.Sleep(100); 
      success = true; 
     } 
     this.Close(); 
    } 

    void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
    { 
     progressBar1.Value = e.ProgressPercentage; 
    } 

    private void writeException(string ex) 
    { 
     ex = "Date: " + DateTime.Now.ToString() + " Exception: " + ex + "\r\n"; 
     File.AppendAllText("downloadLog.txt", ex); 
     MessageBox.Show("An error has occurred; it has been logged"); 
     this.Close(); 
    } 
} 

}

+0

與代碼很好的接觸。我只是想提一下,這是假設一個特定的登錄機制,而不是一個通用的解決方案。從NetworkCredential文檔http://msdn.microsoft.com/en-us/library/system.net.networkcredential.aspx:「NetworkCredential類是提供基於密碼的身份驗證方案(例如basic,摘要,NTLM和Kerberos。[...]該類不支持基於公共密鑰的身份驗證方法,如安全套接字層(SSL)客戶端身份驗證。「 – Triynko 2010-05-26 22:17:48

+0

那麼,我用它來通過SSL進行通信...... – 2010-05-26 22:46:51

+0

這裏要注意的關鍵是使用WebClient而不是HttpWebRequest和HttpWebResponse。如果Selenium出來了,我寧願WebClient通過HttpWebRequest/Response。 – 2010-05-28 21:52:36

0

瀏覽器自動化(請參閱下面的鏈接)可能會有用。

但請記住...登錄頁面實際上是一個複雜的客戶端應用程序,能夠形成一個複雜的,甚至加密的Web請求。所以,通過規避你可能認爲只是一個接口,你實際上繞過了整個客戶端應用程序(它可以制定一個簡單的HTTP POST,或者可以執行一些複雜的JavaScript操作,然後連接到Flash播放器,然後直接連接到登錄服務器,但你明白了)。登錄界面(現在可能是一個小應用程序)可以在任何時候大幅更新,使自動登錄軟件失效。

因此,您可能想要使用可以在高級別上自動運行的東西,使用可用的接口(而不是繞過它並嘗試制定自己的HTTP請求),並且類似http://seleniumhq.org/可能會有所幫助。

只要小心編寫軟件,將您的憑證盲目地發送到網頁。當頁面被劫持或者頁面由於某種原因突然未加密時,您不在那裏監控它。只是一個想法。

0

好吧,如果這是不可能連接到一個銀行網站和下載交易程序(我可以向你保證這不是 - 幾乎任何可以由用戶來完成可以有足夠的聰明才智代碼來完成)是如何它存在的iOS應用程序可以做到這一點嗎?我知道,因爲我經常使用這些應用程序之一。此外,我認爲Quickbooks Enterprise能夠做到這一點(但不要在此引用我)。

我能想到的唯一一件事就表明,如果iOS應用程序創建者與所有不同的銀行和信用卡公司達成某種協議,您可能無法做到這一點。不知何故,我懷疑它,但我想這是可能的。

+0

它不是不可能的。它通過Web服務工作。這些網絡服務由銀行創建。假設您在富國銀行有一個賬戶。您可以在手機上下載Wells Fargo銀行應用程序。手機上的應用程序使用其Web服務API與Wells Fargo進行通信。問題是,並非所有銀行都公開他們的API。所以你必須使用Fiddler這樣的東西來試圖弄清楚他們的API是如何工作的。 – Icemanind 2014-07-05 21:17:48