Я пытаюсь создать приложение C# Winforms, которое автоматически войдет на сайт и загрузит данные. В частности, я хочу, чтобы мое приложение автоматически регистрировалось на моем сайте онлайн-банкинга, входила в систему и загружала мою историю транзакций. Я могу сделать это вручную, войдя в веб-браузер и загрузив его. Я пытаюсь автоматизировать это. Я знаю, что мне, вероятно, нужно использовать HttpWebRequest и HttpWebResponse. У кого-нибудь есть пример этого или рамки шагов, которые мне нужно предпринять, чтобы выполнить это? Имейте в виду, что это будет безопасный сайт (https), и мне как-то придется собирать информацию о сеансе и сохранять информацию о сеансе в течение всего сеанса. Есть предположения?Программная автоматизация веб-входа
ответ
Посмотрите Selenium, с этим вы можете автоматизировать последовательность взаимодействий между пользователем и браузером.
Возможно, вам повезло, что вы просто можете использовать веб-запрос и ответ для входа в систему, хотя многие банки делают переход к формам входа на основе javascript, чтобы обмануть пароли, чтобы предотвратить трояны. См. Citibank (AU) и Westpac (AU). Это может быть достаточно сложно обойти, что вам, возможно, придется прибегать к регистрации вручную и с помощью скрипта GreaseMonkey автоматизировать загрузку.
В интересах интересов, также стоит сделать некоторые исследования по банковским троянам и как они обрабатывают автоматизированные действия от имени пользователя. См. Zeus Banking Trojan.
Как делают такие программы, как Quicken? В Quicken все, что мне нужно сделать, это выбрать имя моего банка, и он как-то автоматически переходит и извлекает все данные истории транзакций? – Icemanind
Quicken должен использовать API, проверить свой банк, чтобы узнать, является ли этот API общедоступным или разрешен только для использования доверенным программным обеспечением (которое заплатило лицензию на разработку программного обеспечения) – blissapp
Я не вижу его после выполнения быстрого поиска Google. Я предполагаю, что Quicken и банк должны иметь какое-то соглашение о переговорах, которое позволяет им получать доступ к банковским счетам из своего программного обеспечения. – Icemanind
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();
}
}
}
Хорошее прикосновение с кодом. Я просто хотел упомянуть, что это предполагает определенный механизм входа и не является общим решением. Из документации NetworkCredential http://msdn.microsoft.com/en-us/library/system.net.networkcredential.aspx: «Класс NetworkCredential является базовым классом, который поставляет учетные данные в парольные схемы аутентификации, такие как базовый, дайджест , NTLM и Kerberos. [...] Этот класс не поддерживает методы аутентификации на основе открытого ключа, такие как аутентификация клиента Secure Sockets Layer (SSL) ». – Triynko
Ну, я использую его для связи по SSL ... –
Ключевой темой здесь является использование WebClient вместо HttpWebRequest и HttpWebResponse. Если бы Селен отсутствовал, я бы предпочел WebClient над HttpWebRequest/Response. –
Автоматизация браузера (см. Ссылку ниже) может быть полезна.
Но помните ... страница входа в систему представляет собой сложное клиентское приложение, способное формировать сложный, даже зашифрованный веб-запрос. Таким образом, обходя то, что вы можете воспринимать как просто интерфейс, вы фактически обходите все клиентское приложение (которое могло бы сформулировать простую HTTP-почту POST или могло бы выполнить некоторую сложную манипуляцию с JavaScript, за которой следует подключение к flash-плееру, а затем прямое соединение к серверу входа, но вы понимаете). Интерфейс входа в систему (действительно потенциально небольшое приложение в настоящее время) может быть обновлен в любое время, что приведет к аннулированию вашего программного обеспечения для автоматического входа в систему.
Итак, вы можете использовать что-то, что может автоматизировать его на высоком уровне, работая с доступным интерфейсом (а не обходить его и пытаться сформулировать ваши собственные HTTP-запросы), и что-то вроде http://seleniumhq.org/ может помочь.
Просто будьте осторожны при написании программного обеспечения, которое слепо отправляет ваши учетные данные на веб-страницу. Вы не должны контролировать это, когда есть захват страницы, или страница внезапно не зашифрована по какой-то причине. Просто мысль.
Посмотрите на Open Financial Exchange спецификация. Вот как Quicken/Money и т. Д. Загружают транзакции из ваших финансовых учреждений.
Хорошо, если невозможно подключиться к банковскому сайту и загружать транзакции программно (я могу заверить вас, что это не так) почти все, что может сделать пользователь, может быть сделано с кодом с достаточной изобретательностью), как что существуют приложения iOS, которые могут это сделать? Я знаю, потому что я использую одно из этих приложений на регулярной основе. Более того, я думаю, что Quickbooks Enterprise способен на это (но не цитируйте меня на этом).
Единственное, что я могу думать об этом, будет означать, что вы НЕ МОЖЕТЕ это сделать, если создатели приложения iOS имеют своего рода соглашение со всеми различными банками и компаниями кредитных карт. Как-то я сомневаюсь в этом, но, я думаю, это возможно.
Его не невозможно. Он работает через веб-службы. Эти веб-сервисы создаются банком. Допустим, у вас есть учетная запись в банке Wells Fargo. И вы загружаете приложение банка Wells Fargo на свой телефон. Приложение на вашем телефоне связывается с Wells Fargo, используя их API веб-сервисов. Проблема в том, что не все банки делают свой API открытым. Поэтому вы должны использовать что-то вроде Fiddler, чтобы попытаться выяснить, как работает их API. – Icemanind
- 1. Программная программная кнопка для запуска триггера Jasper Viewer
- 2. Многопоточная программная логика
- 3. Программная прокрутка EditText
- 4. Программная форма dojo - пример?
- 5. Программная конфигурация ResourceBundleMessageSource
- 6. Swift: Изменение HeightAnchor Программная
- 7. JAVA Рекурсивная программная логика
- 8. Программная передача «net send»
- 9. Чистая программная реализация UI
- 10. Программная установка шрифтов
- 11. Программная эквивалентность Remove-NetEventSession
- 12. Facebook Программная авторизация
- 13. Программная сортировка data.frame()
- 14. Что такое программная среда?
- 15. Программная прокрутка ScrollableTextBlock control
- 16. Программная генерация прокси OData
- 17. MAGENTO: программная переопределяющая цена
- 18. Android сторонняя программная клавиатура
- 19. Программная ссылка CNContacts
- 20. Программная настройка содержимого вкладки
- 21. Программная настройка UITableViewCell
- 22. Программная коммутация мобильной сети
- 23. Программная обнаружение Bot
- 24. Программная привязка данных
- 25. Программная обработка метаданных сборки
- 26. Программная остановка MongoDB
- 27. Программная вставка профилей профилей
- 28. Весенняя программная транзакция
- 29. Программная настройка ControlTemplate Item
- 30. Node.js: программная установка NODE_PATH
У меня нет больших надежд на эти устремления. банки очень активны в предотвращении эксплойтов, и у них есть все деньги в мире, чтобы бросить на них. Вы должны взять вязание или что-то в этом роде. Было бы лучше использовать ваше время, пытаясь преодолеть безопасность банковского сайта. ;-) –
Я не пытаюсь сделать что-то незаконное или взломать или что-то еще. Я просто хочу загрузить мои собственные финансовые транзакции на свой компьютер, чтобы я мог сделать программу, которая будет отслеживать мои расходы. Ничем не отличается от того, что Microsoft Money или Quicken делает – Icemanind
Я не подразумевал, что вы были. Я говорю, что банки не любят и активно предотвращают такой тип использования, независимо от намерения. Вы не найдете здесь радости. В любом случае, удачи. –