2

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

但我以以下方式开始 URL https://

- (void)awakeFromNib {
    NSString *oauthAddress = @"https://www.stackexchange.com/oauth?client_id=...&scope=...&redirect_uri=...";
    [loginWebView setMainFrameURL:oauthAddress];
}

我找不到任何说明您必须执行其他操作才能在标准 WebView 上启用 HTTPS 的来源。

它是由 WebView 内部引起的:在-webView:didFinishLoadForFrame:NSLog()的当前 URL 中:

- (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 这样做?我在 Apple 的 WebView 文档(使用 Cmd+f)中搜索了“https”(0 个匹配项)、“ssl”(0 个匹配项)甚至“安全”(又是 0 个匹配项)。我有点卡在这里,但它必须是可能的。提供如此复杂的浏览器控件将是荒谬的,但迫使开发人员编写一个副本来支持https(这在当今 IMO 很常见)!

如何使用 WebKit 的 WebView 发出 HTTPS 请求?

4

1 回答 1

1

这与 WebKit 无关。删除万维网。像这样从您的网址中获取https://stackexchange.com/oauth,您应该没问题。至少这对我有用。

于 2013-03-05T18:05:28.527 回答