2013-03-05 71 views
2

我试图使用StackExchange API的隐式身份验证,因此我需要将用户发送到https://www.stackexchange.com/oauth?client_id=...&scope=...&redirect_uri=...(使用实际值而不是'...')。很简单,只需在Interface Builder中拖出一个WebView,然后执行WebFrameLoadDelegate协议中的-webView:didFinishLoadForFrame:即可跟踪我们是否已经在redirect_uri就像我想要的那样工作。但是WebView内部没有。从stackexchange.com/oauth错误页面:在Mac OS X中使用WebView查看HTTPS页面

Application Login Failure

An error occurred while login into an application.

Error Details:

error: invalid_request
error description: OAuth request must be over HTTPS

但我开始URL以https://

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

我找不到说你必须做别的事情启用HTTPS在标准的WebView任何源。

它是由内部的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这样做?我在WebView上搜索了Apple的文档(用Cmd + f)'https'(0个匹配),'ssl'(0个匹配),甚至'安全'(再次匹配0个)。我有点卡在这里,但它一定是可能的。提供这样一个复杂的浏览器控制将是荒谬的,但迫使开发人员编写一个支持https(现在很常见的IMO)的副本!

如何使用WebKit的WebView创建HTTPS请求?

+0

这似乎与Webkit没有关系,而是与堆栈交换有关。 它可以很好地与任何其他网站(尝试与Facebook和检查URL)。 – 2013-03-05 17:56:03

回答

1

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

+0

非常感谢! – 11684 2013-03-05 18:29:15