当服务器返回“临时移动”或“永久移动”时,如何使用NSURLConnection获取重定向URL?

雄狮

我有一个格式为schema:// hostname的URL(例如https://some.server.com)。
我正在尝试获取重定向页面(以我的情况为登录表单)(例如,httpx://some.server.com/this/is/you/loginpage)

浏览器将自动重定向到此页面,该页面通过响应中的“ Location”标头从服务器接收。在Google Chrome浏览器中分析此请求时,我看到带有位置标头的“ 302”状态。此位置标头具有正确的URL,但是由于某些原因,我无法使用NSURLConnectionDelegate方法检索此标头(或http状态!)。我也尝试过AFNetworking,但结果相同。

在这种情况下,仅对规范更改而不对位置更改调用connection:willSendRequest:redirectResponse:方法。

我还发现UIWebView DOES会自动重定向到此“位置” URL。我还可以使用UIWebView委托方法捕获此重定向:webView:shouldStartLoadWithRequest:navigationType:我不想使用UIWebView,因为这是一个UI组件,只能在主线程中访问,而我正在做一些事情后台操作。(但是,现在我将其用作解决方法)。

此处还描述了所需的行为:http : //en.wikipedia.org/wiki/HTTP_location有任何想法如何使用NSURLConnection(或任何AFNetworking类)检测/执行此重定向?

使用NSURLConnection的相关代码(在这种情况下不会重定向):

- (void)resolveUsingNSURLConnection:(NSURL *)URL {
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    self.isRequestBusy = YES;
    NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if (urlConnection) {
        [self waitUntilRequestFinished];
    }

    NSLog(@"resolveUsingNSURLConnection ready (status: %i, URL: %@)", self.response.statusCode, self.response.URL);
}

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse {
    if (redirectResponse) {
        // Just log the redirect request
        NSLog(@"[%@] server redirect allowed:\n\t%@ %@\n\t%@ %@", NSStringFromClass([self class]), self.request.HTTPMethod, self.request.URL.absoluteString, request.HTTPMethod, request.URL.absoluteString);
        return request;
    } else {
        // Just log the canonical change
        NSLog(@"[%@] canonical change:\n\t%@ %@\n\t%@ %@", NSStringFromClass([self class]), self.request.HTTPMethod, self.request.URL.absoluteString, request.HTTPMethod, request.URL.absoluteString);
        return request;
    }
}

使用UIWebView的相关代码(具有所需的重定向行为,而不是所需的组件):

- (void)resolveUsingUIWebView:(NSURL *)URL {
    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(resolveUsingUIWebView:) withObject:URL waitUntilDone:YES];
        return;
    }

    NSURLRequest *hostnameURLRequest = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f];
    self.isRequestBusy = YES;
    UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectZero];
    webview.delegate = self;
    [webview loadRequest:hostnameURLRequest];
    [self waitUntilRequestFinished];

    NSLog(@"resolveUsingUIWebView ready (status: UNKNOWN, URL: %@)", webview.request.URL);
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"webView:shouldStartLoadWithRequest: %@ (%i)", request.URL, navigationType);
    return YES;
}
扎夫

我见过几种UIWebView处理重定向的方法,有两种:

Web服务可能会检查User-Agent字符串并采取不同的行动。

重定向可以是JaveScript。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Nginx重定向可在浏览器上使用,但使用curl时,它仅输出301永久移动

来自分类Dev

如何从HTTP服务器检索重定向URL。

来自分类Dev

如何停止url重定向到您的服务器

来自分类Dev

在使用具有临时端口的JMX服务器时,如何获取服务器端口号?

来自分类Dev

Nuxt JS 服务器部署 - 如何使用 htaccess 将 URL 重定向到 localhost:3000

来自分类Dev

使用angular js时如何执行服务器端重定向

来自分类Dev

使用 PHP -S localhost 服务器时如何使重定向工作(.htaccess)?

来自分类Dev

如何使用urlrewritefilter从旧版服务器中移动页面

来自分类Dev

如何使服务器自动移动文件?

来自分类Dev

如何禁用移动重定向?

来自分类Dev

如何在Prestashop中停止移动浏览器URL重定向

来自分类Dev

将站点从服务器移动到另一个站点后,WordPress重定向给出404

来自分类Dev

如何在Apache Web服务器中附加URL以重定向到weblogic应用服务器

来自分类Dev

网页中的Web服务器URL重定向循环

来自分类Dev

如何将我的 url 流量重定向到我自己的 linux 服务器?

来自分类Dev

用户选择时的移动重定向

来自分类Dev

使用301重定向时500服务器错误

来自分类Dev

服务器移动时Opencart错误编号:1054

来自分类Dev

如何缩短指向我的服务器的 URL(非移动应用程序)

来自分类Dev

如何使用AFNetworking获取重定向的URL?

来自分类Dev

如何重定向我的DNS服务器

来自分类Dev

如何在使用 Selenium 路由到另一个 url 之前获取临时出现的重定向 url?

来自分类Dev

URL重定向问题未在服务器上重定向

来自分类Dev

我如何使用htaccess在测试wamp服务器上重定向

来自分类Dev

如何使用代理在vue cli开发服务器中处理重定向?

来自分类Dev

移动重定向循环

来自分类Dev

如何在运行Express JS服务器时永久使用

来自分类Dev

如何在运行Express JS服务器时永久使用

来自分类Dev

如何在sftp服务器中移动文件?

Related 相关文章

  1. 1

    Nginx重定向可在浏览器上使用,但使用curl时,它仅输出301永久移动

  2. 2

    如何从HTTP服务器检索重定向URL。

  3. 3

    如何停止url重定向到您的服务器

  4. 4

    在使用具有临时端口的JMX服务器时,如何获取服务器端口号?

  5. 5

    Nuxt JS 服务器部署 - 如何使用 htaccess 将 URL 重定向到 localhost:3000

  6. 6

    使用angular js时如何执行服务器端重定向

  7. 7

    使用 PHP -S localhost 服务器时如何使重定向工作(.htaccess)?

  8. 8

    如何使用urlrewritefilter从旧版服务器中移动页面

  9. 9

    如何使服务器自动移动文件?

  10. 10

    如何禁用移动重定向?

  11. 11

    如何在Prestashop中停止移动浏览器URL重定向

  12. 12

    将站点从服务器移动到另一个站点后,WordPress重定向给出404

  13. 13

    如何在Apache Web服务器中附加URL以重定向到weblogic应用服务器

  14. 14

    网页中的Web服务器URL重定向循环

  15. 15

    如何将我的 url 流量重定向到我自己的 linux 服务器?

  16. 16

    用户选择时的移动重定向

  17. 17

    使用301重定向时500服务器错误

  18. 18

    服务器移动时Opencart错误编号:1054

  19. 19

    如何缩短指向我的服务器的 URL(非移动应用程序)

  20. 20

    如何使用AFNetworking获取重定向的URL?

  21. 21

    如何重定向我的DNS服务器

  22. 22

    如何在使用 Selenium 路由到另一个 url 之前获取临时出现的重定向 url?

  23. 23

    URL重定向问题未在服务器上重定向

  24. 24

    我如何使用htaccess在测试wamp服务器上重定向

  25. 25

    如何使用代理在vue cli开发服务器中处理重定向?

  26. 26

    移动重定向循环

  27. 27

    如何在运行Express JS服务器时永久使用

  28. 28

    如何在运行Express JS服务器时永久使用

  29. 29

    如何在sftp服务器中移动文件?

热门标签

归档