就用一个很简单的例子

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. @interface ViewController ()
  3. @end
  4. @implementation ViewController
  5. - (void)viewDidLoad {
  6. [super viewDidLoad];
  7. NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
  8. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  9. NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
  10. if (!connection) {
  11. NSLog(@"FAIL");
  12. }
  13. }
  14. - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
  15. NSLog(@"================================================");
  16. NSLog(@"will send request\n%@", [request URL]);
  17. NSLog(@"redirect response\n%@", [response URL]);
  18. return request;
  19. }
  20. @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. ====will send request====
  6. 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
  7. ====redirect response====
  8. http://www.google.com/
  9. ====will send request====
  10. http://www.google.com.hk/
  11. ====redirect response====
  12. 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

第三次

  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就好了

iOS应用中URL地址如何重定向-b的更多相关文章

  1. web工程中URL地址的推荐写法

    三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...

  2. web工程中URL地址的写法

    在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开 ...

  3. JavaWeb工程中url地址的写法

    两种url地址: 1. "/"给服务器使用, 代表web工程根路径(webroot)2. "/"给浏览器使用, 代表tomcat 目录下的webapps文件夹 ...

  4. YII中URL地址美化

    URL地址美化:urlManager地址管理(通过程序来实现url的地址美化) 例如: 原地址:http://localhost/项目/app/index.php?r=控制器/方法 新地址:http: ...

  5. springboot中url地址重写(urlwrite)

    在日常网站访问中,会把动态地址改造成伪静态地址. 例如: 访问新闻栏目 /col/1/,这是原有地址,如果这样访问,不利于搜索引擎检索收录,同时安全性也不是很好. 改造之后: /col/1.html. ...

  6. (转)HTTP请求中URL地址的编码和解码

    HTTP请求中,类似   http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html  的地址 如何解码成    http://www ...

  7. tp中url地址大小写问题

    在tp配置文件中有一个URL_CASE_INSENSITIVE选项,设置为true,表示大小写不敏感. 'URL_CASE_INSENSITIVE' => true

  8. servlet中的转发和重定向问题

    重定向和请求转发在学习servlet的时候很容易混淆,故在此特意记录. 1. 重定向---------sendRedirect()方法 Servlet响应请求有两种方式,一个是重定向,返回一个页面给客 ...

  9. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

随机推荐

  1. Codeforces Round #191 (Div. 2)

    在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽. A.Flipping Game 直接枚举 B. Hungry Sequence 由于素数的分布 ...

  2. eclipse svn重定位(relocate)

    eclipse 中项目svn 重定向 How to properly perform an SVN relocate on Zend for Eclipse 在eclipse中项目的svn 重定位(r ...

  3. css3media响应式布局

    响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的 普及,用"大势所趋"来形容也不为过.随着越来越多的设计师采用这个技术,我们不仅看到很 ...

  4. 编写SASS的一些技巧

    更好的为变量命名 变量是Sass中最简单的特性之一,但有时候也会使用不当.创建站点范围内有语义化的变量,是不可或缺的工作.如果命名不好,他会变得难以理解和重复使用. 这里有一些命名变量的小技巧,提供参 ...

  5. Jedis - hello world

    Maven Dependency: <dependency> <groupId>redis.clients</groupId> <artifactId> ...

  6. asp.net常见面试题(一)

    1.索引器 class Player { ]; public int this[int index] { get { || index >= ) { ; } else { return arr[ ...

  7. 微信之Android各版本列表

    微信在不断地更新迭代,ios微信下载点击这里立即开始(手机电脑都可以,电脑端要安装iTunes),每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.(这里有Android微 ...

  8. MYSQL 排行类的相关SQL写法,仅供参考

    SELECT * FROM () )) b

  9. Contoso 大学 - 6 – 更新关联数据

    原文 Contoso 大学 - 6 – 更新关联数据 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's ...

  10. Build Firefox 编译Firefox

    准备 选择需要的firefox版本 http://hg.mozilla.org/releases/ 选择最新的build工具 http://ftp.mozilla.org/pub/mozilla.or ...