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 の内部が原因です: in -webView:didFinishLoadForFrame:I 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がそうするのを止める方法は? 「https」(0件の一致)、「ssl」(0件の一致)、さらには「secure」(これも0件の一致)について、WebView(Cmd + fを使用)に関するAppleのドキュメントを検索しました。私はここで立ち往生していますが、それは可能でなければなりません。このような洗練されたブラウザ コントロールを提供するのはばかげていますが、開発者にサポート用のコピーを作成するように強制しますhttps(これは、最近の IMO では非常に一般的です)。

WebKit の WebView を使用して HTTPS リクエストを行う方法は?

4

1 に答える 1

1

これは WebKit とは関係ありません。wwwを削除します。あなたのURLからそのようにhttps://stackexchange.com/oauth、あなたは大丈夫なはずです。少なくともそれは私にとってはうまくいきます。

于 2013-03-05T18:05:28.527 に答える