我正在尝试使用StackExchange API的隐式身份验证,因此我需要将用户发送到https://www.stackexchange.com/oauth?client_id=...&scope=...&redirect_uri=...
(使用实际值而不是'...')。简单,只需在Interface Builder中拖出WebView并从-webView:didFinishLoadForFrame:
协议实施WebFrameLoadDelegate
即可跟踪我们是否已经redirect_uri
。 那完全符合我的要求。但WebView内部却没有。来自stackexchange.com/oauth
的错误页面:
应用程序登录失败
登录应用程序时发生错误。
错误详细信息:
错误:invalid_request
错误说明:OAuth请求必须通过HTTPS
但是我使用https://
:
- (void)awakeFromNib {
NSString *oauthAddress = @"https://www.stackexchange.com/oauth?client_id=...&scope=...&redirect_uri=...";
[loginWebView setMainFrameURL:oauthAddress];
}
我找不到任何说明您必须在标准WebView上启用HTTPS的其他来源。
它是由WebView内部引起的:在-webView:didFinishLoadForFrame:
我NSLog()
'当前网址:
- (void)webView:(WebView *)webView didFinishLoadForFrame:(WebFrame *)webFrame {
NSString *currentURL = [[[[webFrame dataSource] request] URL] absoluteString];
NSLog(@"-webView:didStartProvisionalLoadForFrame:");
NSLog(@"Current URL: %@", currentURL);
if ([currentURL hasPrefix:@"https://stackexchange.com/oauth/login_success"]) {
NSLog(@"We did login!");
}
}
输出:
2013-03-05 15:31:55.493 MacOverflow[2164:a0f] -webView:didStartProvisionalLoadForFrame:
2013-03-05 15:31:55.495 MacOverflow[2164:a0f] Current URL: http://stackexchange.com/oauth?client_id=...scope=...&redirect_uri=...
什么?! WebKit从URL的协议部分删除了's'!如何阻止WebKit这样做?我在WebView(带有Cmd + f)上搜索Apple的文档,搜索'https'(0匹配),'ssl'(0匹配)甚至'secure'(再次匹配0)。我有点被困在这里,但一定是可能的。提供如此复杂的浏览器控件会很荒谬,但迫使开发人员编写一份副本来支持https
(现在IMO很常见)!
如何使用WebKit的WebView进行HTTPS请求?
答案 0 :(得分:1)
这与WebKit无关。
删除www。从您的网址https://stackexchange.com/oauth
开始,您应该没问题。至少这对我有用。