在Mac OS X应用程序中使用WebView查看HTTPS页面

时间:2013-03-05 14:42:04

标签: objective-c macos oauth https webkit

我正在尝试使用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请求?

1 个答案:

答案 0 :(得分:1)

这与WebKit无关。 删除www。从您的网址https://stackexchange.com/oauth开始,您应该没问题。至少这对我有用。