api - ETrade API无人值守认证

标签 api oauth windows-services etrade-api

背景
ETrade 身份验证系统让我创建一个 RequestToken,然后执行一个授权 URL,这将打开一个 ETrade 页面。 用户登录以授权其帐户上的事件。 他们会收到一个 PIN 码,并将其输入到我的应用程序中。 我使用 RequestToken 和 Pin 调用 ExchangeRequestTokenForAccessToken。 然后我们就出发并运行。

问题
问题是我正在创建一个在后台持续运行的服务。不会有任何用户登录。相反,我不会进行任何交易。只是处理数字,寻找符合特定标准的股票。 我不知道如何让它在无人值守的情况下工作。

谢谢布拉德。

最佳答案

之前,我使用了一系列WebRequest并手动添加 header 来模拟授权页面。这种方法一直有效,直到大约一年前,当时 ETrade 用一些看似跟踪信息的东西复杂化了他们的标题。我现在用http://watin.org/登录并删除授权码。

草率的代码如下所示:

            using WatiN.Core; // IE Automation
...
            // verify current thread in STA.

            Settings.Instance.MakeNewIeInstanceVisible = false;

            var ieStaticInstanceHelper = new IEStaticInstanceHelper();
            Settings.AutoStartDialogWatcher = false;

            using (ieStaticInstanceHelper.IE = new IE())
            {
                string authCode = "";
                ieStaticInstanceHelper.IE.GoTo(GetAuthorizationLink());

                if (ieStaticInstanceHelper.IE.ContainsText("Scheduled System Maintenance"))
                {
                    throw new ApplicationException("eTrade down for maintenance.");
                }

                TextField user = ieStaticInstanceHelper.IE.TextField(Find.ByName("USER"));

                TextField pass = ieStaticInstanceHelper.IE.TextField(Find.ById("txtPassword"));

                TextField pass2 = ieStaticInstanceHelper.IE.TextField(Find.ByName("PASSWORD"));

                Button btn = ieStaticInstanceHelper.IE.Button(Find.ByClass("log-on-btn"));
                Button btnAccept = ieStaticInstanceHelper.IE.Button(Find.ByValue("Accept"));


                TextField authCodeBox = ieStaticInstanceHelper.IE.TextField(Find.First());

                if (user != null && pass != null && btn != null &&
                    user.Exists && pass2.Exists && btn.Exists)
                {
                    user.Value = username;
                    pass2.Value = password;
                    btn.Click();
                }

                btnAccept.WaitUntilExists(30);
                btnAccept.Click();

                authCodeBox.WaitUntilExists(30);
                authCode = authCodeBox.Value;

                SavePin(authCode);
            }

关于api - ETrade API无人值守认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40316556/

相关文章:

json - 如何在输入/输出中保持 FK 的表示一致(RESTful JSON API)

oauth - 如何检测 OAuth2 刷新 token 何时过期

windows-services - 收集 Windows 服务依赖项

c# - 如何从 .NET Core 2.1/2.2 创建 Windows 服务

php - YouTube PHP API: session 状态与NULL字符串(10) “1494600193”不匹配

java - 学习如何正确阅读Javadoc

c# - USPS 地址验证 API : If & or # symbol in address field then API returns error response

node.js - Passport .js : Are UID unique?

maven - 如何使用 maven 获取 OAuth 的 java 客户端库?

c# - 如何将 Windows 服务安装到另一个系统?