2010-05-26 3 views
1

Я пытаюсь создать приложение C# Winforms, которое автоматически войдет на сайт и загрузит данные. В частности, я хочу, чтобы мое приложение автоматически регистрировалось на моем сайте онлайн-банкинга, входила в систему и загружала мою историю транзакций. Я могу сделать это вручную, войдя в веб-браузер и загрузив его. Я пытаюсь автоматизировать это. Я знаю, что мне, вероятно, нужно использовать HttpWebRequest и HttpWebResponse. У кого-нибудь есть пример этого или рамки шагов, которые мне нужно предпринять, чтобы выполнить это? Имейте в виду, что это будет безопасный сайт (https), и мне как-то придется собирать информацию о сеансе и сохранять информацию о сеансе в течение всего сеанса. Есть предположения?Программная автоматизация веб-входа

+1

У меня нет больших надежд на эти устремления. банки очень активны в предотвращении эксплойтов, и у них есть все деньги в мире, чтобы бросить на них. Вы должны взять вязание или что-то в этом роде. Было бы лучше использовать ваше время, пытаясь преодолеть безопасность банковского сайта. ;-) –

+1

Я не пытаюсь сделать что-то незаконное или взломать или что-то еще. Я просто хочу загрузить мои собственные финансовые транзакции на свой компьютер, чтобы я мог сделать программу, которая будет отслеживать мои расходы. Ничем не отличается от того, что Microsoft Money или Quicken делает – Icemanind

+0

Я не подразумевал, что вы были. Я говорю, что банки не любят и активно предотвращают такой тип использования, независимо от намерения. Вы не найдете здесь радости. В любом случае, удачи. –

ответ

3

Посмотрите Selenium, с этим вы можете автоматизировать последовательность взаимодействий между пользователем и браузером.

Возможно, вам повезло, что вы просто можете использовать веб-запрос и ответ для входа в систему, хотя многие банки делают переход к формам входа на основе javascript, чтобы обмануть пароли, чтобы предотвратить трояны. См. Citibank (AU) и Westpac (AU). Это может быть достаточно сложно обойти, что вам, возможно, придется прибегать к регистрации вручную и с помощью скрипта GreaseMonkey автоматизировать загрузку.

В интересах интересов, также стоит сделать некоторые исследования по банковским троянам и как они обрабатывают автоматизированные действия от имени пользователя. См. Zeus Banking Trojan.

+0

Как делают такие программы, как Quicken? В Quicken все, что мне нужно сделать, это выбрать имя моего банка, и он как-то автоматически переходит и извлекает все данные истории транзакций? – Icemanind

+0

Quicken должен использовать API, проверить свой банк, чтобы узнать, является ли этот API общедоступным или разрешен только для использования доверенным программным обеспечением (которое заплатило лицензию на разработку программного обеспечения) – blissapp

+1

Я не вижу его после выполнения быстрого поиска Google. Я предполагаю, что Quicken и банк должны иметь какое-то соглашение о переговорах, которое позволяет им получать доступ к банковским счетам из своего программного обеспечения. – Icemanind

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 является базовым классом, который поставляет учетные данные в парольные схемы аутентификации, такие как базовый, дайджест , NTLM и Kerberos. [...] Этот класс не поддерживает методы аутентификации на основе открытого ключа, такие как аутентификация клиента Secure Sockets Layer (SSL) ». – Triynko

+0

Ну, я использую его для связи по SSL ... –

+0

Ключевой темой здесь является использование WebClient вместо HttpWebRequest и HttpWebResponse. Если бы Селен отсутствовал, я бы предпочел WebClient над HttpWebRequest/Response. –

0

Автоматизация браузера (см. Ссылку ниже) может быть полезна.

Но помните ... страница входа в систему представляет собой сложное клиентское приложение, способное формировать сложный, даже зашифрованный веб-запрос. Таким образом, обходя то, что вы можете воспринимать как просто интерфейс, вы фактически обходите все клиентское приложение (которое могло бы сформулировать простую HTTP-почту POST или могло бы выполнить некоторую сложную манипуляцию с JavaScript, за которой следует подключение к flash-плееру, а затем прямое соединение к серверу входа, но вы понимаете). Интерфейс входа в систему (действительно потенциально небольшое приложение в настоящее время) может быть обновлен в любое время, что приведет к аннулированию вашего программного обеспечения для автоматического входа в систему.

Итак, вы можете использовать что-то, что может автоматизировать его на высоком уровне, работая с доступным интерфейсом (а не обходить его и пытаться сформулировать ваши собственные HTTP-запросы), и что-то вроде http://seleniumhq.org/ может помочь.

Просто будьте осторожны при написании программного обеспечения, которое слепо отправляет ваши учетные данные на веб-страницу. Вы не должны контролировать это, когда есть захват страницы, или страница внезапно не зашифрована по какой-то причине. Просто мысль.

2

Посмотрите на Open Financial Exchange спецификация. Вот как Quicken/Money и т. Д. Загружают транзакции из ваших финансовых учреждений.

0

Хорошо, если невозможно подключиться к банковскому сайту и загружать транзакции программно (я могу заверить вас, что это не так) почти все, что может сделать пользователь, может быть сделано с кодом с достаточной изобретательностью), как что существуют приложения iOS, которые могут это сделать? Я знаю, потому что я использую одно из этих приложений на регулярной основе. Более того, я думаю, что Quickbooks Enterprise способен на это (но не цитируйте меня на этом).

Единственное, что я могу думать об этом, будет означать, что вы НЕ МОЖЕТЕ это сделать, если создатели приложения iOS имеют своего рода соглашение со всеми различными банками и компаниями кредитных карт. Как-то я сомневаюсь в этом, но, я думаю, это возможно.

+0

Его не невозможно. Он работает через веб-службы. Эти веб-сервисы создаются банком. Допустим, у вас есть учетная запись в банке Wells Fargo. И вы загружаете приложение банка Wells Fargo на свой телефон. Приложение на вашем телефоне связывается с Wells Fargo, используя их API веб-сервисов. Проблема в том, что не все банки делают свой API открытым. Поэтому вы должны использовать что-то вроде Fiddler, чтобы попытаться выяснить, как работает их API. – Icemanind

Смежные вопросы