如何获取WebView中每个请求的服务器响应代码

博格丹·劳金(Bogdan Laukhin)

我有通过WebView管理的授权逻辑:

  • 用户单击应用程序中的登录按钮
  • 我打开加载登录网页的WebView(通过URL地址打开)
  • 用户提供他们的登录名和密码>单击页面上的登录按钮
  • 在WebView中打开下一页-授权访问确认页
  • 用户必须单击网页上的授权访问按钮
  • 在此redirect_uri URL之后,将尝试在WebView中打开URL
  • 我在请求中捕获了redirect_uri并关闭了WebView

我检查WebView委托方法中的所有请求(以捕获redirect_uri)shouldStartLoadWithRequest:

问题:如何管理在WebView中打开的每个页面请求的服务器响应?

关键是我们在身份验证服务器方面存在一些问题,并且它有时会显示错误页面。因此,我想捕获此类页面并在这种情况下关闭WebView。

博格丹·劳金(Bogdan Laukhin)

通过找到了解决方案WKWebView我以与UIWebView项目中相同的方式进行连接

然后我实际上使用了WKNavigationDelegate协议中的2种方法

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler

代码示例:

第一种方法是检查当前请求是否实际上redirect_uri应由我们处理:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSLog(@"request: %@", navigationAction.request);

    // check whether this request should be stopped - if this is redirect_uri (like user is already authorized)
    if (...) {
        self.webView.navigationDelegate = nil;

        // do what is needed to send authorization data back
        self.completionBlock(...);

        // close current view controller
        [self dismissViewControllerAnimated:YES completion:nil];

        // stop executing current request
        decisionHandler(WKNavigationActionPolicyCancel);

    } else {
        // otherwise allow current request
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

第二种方法是分析服务器的响应,在这里我们可以验证状态码以处理任何错误

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response;

    // filter the responses, in order to verify only the response from specific domain
    if ([[NSString stringWithFormat:[[response URL] absoluteString]] containsString:@"some.domain.com/"]) {

        NSInteger statusCode = [response statusCode];

        // check what is the status code
        if (statusCode == 200 ||
            statusCode == 301 ||
            statusCode == 302) {

            // allow response as everything is ok
            decisionHandler(WKNavigationResponsePolicyAllow);

        } else {
            // handle the error (e.g. any of 4xx or any others)

            self.webView.navigationDelegate = nil;

            // send needed info back
            self.completionBlock(...);

            // close current view controller
            [self dismissViewControllerAnimated:YES completion:nil];

            // stop current response
            decisionHandler(WKNavigationResponsePolicyCancel);
        }

    } else {
        // current response is not from our domain, so allow it
        decisionHandler(WKNavigationResponsePolicyAllow);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

$ .ajax请求中的412服务器响应代码

来自分类Dev

如何执行POST请求并从服务器获取响应?

来自分类Dev

如何在D上获取服务器响应代码?

来自分类Dev

如何在D上获取服务器响应代码?

来自分类Dev

如何在Volley中获取JSONObject服务器响应

来自分类Dev

如何从Intent Service中的服务器获取Json响应?

来自分类Dev

如何从http响应中获取服务器名称

来自分类Dev

如何从服务器请求中获取文件名?

来自分类Dev

如何从服务器请求中获取文件名?

来自分类Dev

对Web服务器日志中每个URI的请求和状态代码进行计数

来自分类Dev

对Web服务器日志中每个URI的请求和状态代码进行计数

来自分类Dev

服务器在Grails中以302响应时如何获取响应正文?

来自分类Dev

如何衡量服务器的请求和响应时间?

来自分类Dev

如何检测服务器是否通过TIdTCPClient响应请求?

来自分类Dev

如何在Racket中设置一个非常基本的请求响应HTTP服务器?

来自分类Dev

如何在Swift中查看来自HTTP GET请求的服务器响应?

来自分类Dev

如何获取Git服务器中两个请求请求之间的更改列表

来自分类Dev

如何在请求被写入代理Netty服务器的outboundChannel中的同一句柄中获取响应byteBuf

来自分类Dev

在C中检查服务器响应代码200

来自分类Dev

我如何从 PHP 中的 JSON 服务器响应中获取数据

来自分类Dev

服务器中的每个php文件上都附带如何修复随机php代码

来自分类Dev

服务器中的每个php文件上都附带如何修复随机php代码

来自分类Dev

如何使用PHP获取服务器响应时间

来自分类Dev

服务器错误时如何获取响应内容

来自分类Dev

如何从服务器获取有效的json响应

来自分类Dev

如何从 PHP 服务器异步获取响应

来自分类Dev

如何使用HTML中的Ajax方法从节点服务器获取响应

来自分类Dev

从Web服务器响应中获取数据

来自分类Dev

从 JSON 中的服务器响应获取令牌

Related 相关文章

  1. 1

    $ .ajax请求中的412服务器响应代码

  2. 2

    如何执行POST请求并从服务器获取响应?

  3. 3

    如何在D上获取服务器响应代码?

  4. 4

    如何在D上获取服务器响应代码?

  5. 5

    如何在Volley中获取JSONObject服务器响应

  6. 6

    如何从Intent Service中的服务器获取Json响应?

  7. 7

    如何从http响应中获取服务器名称

  8. 8

    如何从服务器请求中获取文件名?

  9. 9

    如何从服务器请求中获取文件名?

  10. 10

    对Web服务器日志中每个URI的请求和状态代码进行计数

  11. 11

    对Web服务器日志中每个URI的请求和状态代码进行计数

  12. 12

    服务器在Grails中以302响应时如何获取响应正文?

  13. 13

    如何衡量服务器的请求和响应时间?

  14. 14

    如何检测服务器是否通过TIdTCPClient响应请求?

  15. 15

    如何在Racket中设置一个非常基本的请求响应HTTP服务器?

  16. 16

    如何在Swift中查看来自HTTP GET请求的服务器响应?

  17. 17

    如何获取Git服务器中两个请求请求之间的更改列表

  18. 18

    如何在请求被写入代理Netty服务器的outboundChannel中的同一句柄中获取响应byteBuf

  19. 19

    在C中检查服务器响应代码200

  20. 20

    我如何从 PHP 中的 JSON 服务器响应中获取数据

  21. 21

    服务器中的每个php文件上都附带如何修复随机php代码

  22. 22

    服务器中的每个php文件上都附带如何修复随机php代码

  23. 23

    如何使用PHP获取服务器响应时间

  24. 24

    服务器错误时如何获取响应内容

  25. 25

    如何从服务器获取有效的json响应

  26. 26

    如何从 PHP 服务器异步获取响应

  27. 27

    如何使用HTML中的Ajax方法从节点服务器获取响应

  28. 28

    从Web服务器响应中获取数据

  29. 29

    从 JSON 中的服务器响应获取令牌

热门标签

归档