【发布时间】:2017-09-12 02:38:58
【问题描述】:
我现在可以正确登录并获得密码,所以我仍将其视为进度。
有人可以检查我正在加密的字符串吗?
“错误请求”还有什么含义?
首先,我得到了 AccessToken,
生成这个签名库
'GET&https%3A%2F%2Fetws.etrade.com%2Foauth%2Frequest_token&oauth_callback%3Doob%26oauth_consumer_key%3Dc5164d11e1a0a23901d75e7aa1993085%26oauth_nonce%3D565e334127934d65aa4375d0cd2770a1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1502146468%26oauth_version%3D1.0'
然后它调用SignContext来执行这一行
signingContext.SignatureBase = authContext.GenerateSignatureBase();
生成此签名库
'GET&https%3A%2F%2Fetws.etrade.com%2Foauth%2Frequest_token&oauth_callback%3Doob%26oauth_consumer_key%3Dc5164d11e1a0a23901d75e7aa1993085%26oauth_nonce%3D565e334127934d65aa4375d0cd2770a1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1502146468%26oauth_version%3D1.0'
然后它得到引脚。
然后它调用 ExchangeRequestTokenForAccessToken
生成这个签名库
'GET&https%3A%2F%2Fetws.etrade.com%2Foauth%2Faccess_token&oauth_consumer_key%3Dc5164d11e1a0a23901d75e7aa1993085%26oauth_nonce%3De63bba497c24492ab0d60366526c781a%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1502146597%26oauth_token%3D6WHEWvcaVYx59bRxzic%252FXJGGYrz4TGdH5uvlfNCdkOY%253D%26oauth_verifier%3DNHD85%26oauth_version% 3D1.0'
然后它使用这个签名库再次对上下文进行签名
'GET&https%3A%2F%2Fetws.etrade.com%2Foauth%2Faccess_token&oauth_consumer_key%3Dc5164d11e1a0a23901d75e7aa1993085%26oauth_nonce%3De63bba497c24492ab0d60366526c781a%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1502146597%26oauth_token%3D6WHEWvcaVYx59bRxzic%252FXJGGYrz4TGdH5uvlfNCdkOY%253D%26oauth_verifier%3DNHD85%26oauth_version% 3D1.0'
然后我尝试获取 A 的报价
有了这个签名库
'GET&https%3A%2F%2Fetws.etrade.com%2Fmarket%2Frest%2Fquote%2FA&detailFlag%3DALL%26oauth_consumer_key%3Dc5164d11e1a0a23901d75e7aa1993085%26oauth_nonce%3D4a3640c5fc5c40b490c475a2e6c0228e%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1502146666%26oauth_token%3D77vmxV1reXdgDJewWspVKmOduwdDsZGVvLfZBUtBSms%253D% 26oauth_version%3D1.0'
检索报价失败并返回:
2017 年 8 月 7 日下午 5:57:46 - 标题开始 2017 年 8 月 7 日下午 5:58:18 - 授权:OAuth
oauth_token='77xmvV1reXdgDJewWspVKmOduwdDsZGVvLfZUBtBSms%3D',oauth_nonce='4a3640c5fc5c40b490c475a2e6c0228e',oauth_consumer_key='c5164d11e1a0a23901d75e7aa1993085',oauth_signature_method='HMAC-SHA1',oauth_timestamp='1502146666',oauth_version='1.0',oauth_signature='2OihTU%2BphJjPuvp82lR8Z2QhE24%3D' 2017 年 8 月 7 日下午 5:58:18 - 标题结束 2017 年 8 月 7 日下午 5:58:18 - System.Net.WebException:远程服务器返回错误:(400) 错误的请求。在 System.Net.HttpWebRequest.GetResponse()
在 EquityMetrics.Retrieve.ETradeModel.GetResponse(OAuthSession 会话,字符串 url) 在 C:{path}\Model\ETradeModel.cs:line 94
2017 年 8 月 7 日下午 5:58:18 - 编译指示:无缓存 apiServerName:11w44m3
nnCoection:关闭传输编码:分块缓存控制: 无缓存,无存储内容类型:应用程序/xml 日期:星期一, 2017 年 8 月 7 日 22:58:18 GMT 服务器:Apache
【问题讨论】:
-
看不出有什么明显的问题,您发送到“etws.etrade.com/market/rest/quote/A&detailFlag=ALL”的实际 URL 是?这是您自己的代码或 Etrade 提供的库吗?另请注意 detailFlag = ALL 是默认设置,因此您可以忽略它并尝试一下。您也可以将标头作为 URL 参数直接输入到浏览器中以排除代码问题。
-
AFAIK,除了粗略的说明,etrade 不提供任何东西。加密和签名库位于 oauth 库的深处。我的代码正在调用 oauth 代码。我在这一点上被困了将近一个月,而 etrade API 支持小组也无法提供帮助。
-
由于我收到了错误的请求,似乎有关正在加密的请求的某些内容是错误的。但我没看到。
-
我猜它不是签名,因为你会得到 invalid_signature 错误。我认为 Bad Request 意味着一些错误的请求标头/值,这就是为什么我建议在浏览器中输入(应该在 Chrome 中工作),并去掉详细标志参数以创建更简单的测试。我注意到另一件事,我会把它放在答案中
标签: .net oauth etrade-api