• iOS应用中URL地址如何重定向-b


    就用一个很简单的例子

    http://www.google.com谷歌的首页

    都知道现在浏览器中打开google.com的话事实上会变成http://www.google.com.hk

    网址被重定向了

    如何在app中完成重定向呢

    使用NSURLConnetion类的NSURLConnectionDataDelegate委托

    NSURLConnectionDataDelegate委托中的这个方法

    1. - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response  

    可以得到重定向以后的URL

    看代码

    1. #import "ViewController.h"  
    2.   
    3. @interface ViewController ()  
    4.   
    5. @end  
    6.   
    7. @implementation ViewController  
    8.   
    9. - (void)viewDidLoad {  
    10.     [super viewDidLoad];  
    11.       
    12.     NSURL *url = [NSURL URLWithString:@"http://www.google.com"];  
    13.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
    14.     NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];  
    15.       
    16.     if (!connection) {  
    17.         NSLog(@"FAIL");  
    18.     }  
    19. }  
    20.   
    21. - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {  
    22.     NSLog(@"================================================");  
    23.     NSLog(@"will send request %@", [request URL]);  
    24.     NSLog(@"redirect response %@", [response URL]);  
    25.       
    26.     return request;  
    27. }  
    28.   
    29. @end  


    以上省略了部分无关代码

    解释一下代码

    在viewDidLoad方法中进行了一次连接 正是谷歌的首页

    再看看这个


    1. - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response  

    这个方法在请求将要被发送出去之前会调用

    返回值是一个NSURLRequest就是那个真正将要被发送的请求

    第二个参数request就是被重定向处理过后的请求 在这里就可以拿到需要的URL

    第三个参数response是一个将要触发重定向的请求

    这里把request跟response中的URL打出来看一下

    并直接返回request

    运行看看结果

    1. ====will send request====  
    2. http://www.google.com/  
    3. ====redirect response====  
    4. (null)  
    5.   
    6.   
    7. ====will send request====  
    8. http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg  
    9. ====redirect response====  
    10. http://www.google.com/  
    11.   
    12.   
    13. ====will send request====  
    14. http://www.google.com.hk/  
    15. ====redirect response====  
    16. http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg  


    可以看出进行了两次重定向

    第一次


    1. ====will send request====  
    2. http://www.google.com/  
    3. ====redirect response====  
    4. (null)  

    由于是第一次调用 没有进行重定向处理 所以redirect response是null

    而想要被发送的请求就是www.google.com

    第二次


    1. ====will send request====  
    2. http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg  
    3. ====redirect response====  
    4. http://www.google.com/  

     这个时候redirect response就不是null了 就是第一次中的那个request 也就是说这一次的重定向是由www.google.com这个URL引发的

    而重定向的结果就是http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg

    第三次

    [html] view plaincopy
     
    1. ====will send request====  
    2. http://www.google.com.hk/  
    3. ====redirect response====  
    4. http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg  

    当然这个http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1347589441099727&usg=AFQjCNEsBYcrlh_jqpBWRwsc0NpBj2_lFg

    这个网址不是那个熟悉的网址

    因为还要一次重定向

    这次就跟上面一样了 那个很长的URL这次出现在了redirect response里 触发了这次重定向

    结果可以看到

    就是那个熟悉的www.google.com.hk

    当获得想要的URL以后可以调用[connection cancel];方法来取消连接

    并返回nil就好了

  • 相关阅读:
    python django blog
    Django框架的学习
    Django 与 Flask框架的比较
    pycharm windows 远程修改服务器代码
    matlab的Deep Learning的toolbox 中的SAE算法
    什么是有监督学习和无监督学习
    linux 操作系统rz sz 快速上传和下载文件
    PDF,word ,PPT,等各种文件转换在线工具(免费)
    linux 安装 rz sz 快速上传和下载文件
    sci-hub 下载地址更新
  • 原文地址:https://www.cnblogs.com/isItOk/p/5838290.html
Copyright © 2020-2023  润新知