iOS应用中URL地址如何重定向
2013-12-15 00:05
429 查看
就用一个很简单的例子
http://www.google.com谷歌的首页
都知道现在浏览器中打开google.com的话事实上会变成http://www.google.com.hk
网址被重定向了
如何在app中完成重定向呢
使用NSURLConnetion类的NSURLConnectionDataDelegate委托
NSURLConnectionDataDelegate委托中的这个方法
[html] view
plaincopy
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
可以得到重定向以后的URL
看代码
[html] view
plaincopy
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (!connection) {
NSLog(@"FAIL");
}
}
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
NSLog(@"================================================");
NSLog(@"will send request\n%@", [request URL]);
NSLog(@"redirect response\n%@", [response URL]);
return request;
}
@end
以上省略了部分无关代码
解释一下代码
在viewDidLoad方法中进行了一次连接 正是谷歌的首页
再看看这个
[html] view
plaincopy
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
这个方法在请求将要被发送出去之前会调用
返回值是一个NSURLRequest就是那个真正将要被发送的请求
第二个参数request就是被重定向处理过后的请求 在这里就可以拿到需要的URL
第三个参数response是一个将要触发重定向的请求
这里把request跟response中的URL打出来看一下
并直接返回request
运行看看结果
[html] view
plaincopy
====will send request====
http://www.google.com/
====redirect response====
(null)
====will send request====
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
====redirect response====
http://www.google.com/
====will send request====
http://www.google.com.hk/
====redirect response====
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
====will send request====
http://www.google.com/
====redirect response====
(null)
由于是第一次调用 没有进行重定向处理 所以redirect response是null
而想要被发送的请求就是www.google.com
第二次
[html] view
plaincopy
====will send request====
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
====redirect response====
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
====will send request====
http://www.google.com.hk/
====redirect response====
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就好了
http://www.google.com谷歌的首页
都知道现在浏览器中打开google.com的话事实上会变成http://www.google.com.hk
网址被重定向了
如何在app中完成重定向呢
使用NSURLConnetion类的NSURLConnectionDataDelegate委托
NSURLConnectionDataDelegate委托中的这个方法
[html] view
plaincopy
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
可以得到重定向以后的URL
看代码
[html] view
plaincopy
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (!connection) {
NSLog(@"FAIL");
}
}
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
NSLog(@"================================================");
NSLog(@"will send request\n%@", [request URL]);
NSLog(@"redirect response\n%@", [response URL]);
return request;
}
@end
以上省略了部分无关代码
解释一下代码
在viewDidLoad方法中进行了一次连接 正是谷歌的首页
再看看这个
[html] view
plaincopy
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
这个方法在请求将要被发送出去之前会调用
返回值是一个NSURLRequest就是那个真正将要被发送的请求
第二个参数request就是被重定向处理过后的请求 在这里就可以拿到需要的URL
第三个参数response是一个将要触发重定向的请求
这里把request跟response中的URL打出来看一下
并直接返回request
运行看看结果
[html] view
plaincopy
====will send request====
http://www.google.com/
====redirect response====
(null)
====will send request====
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
====redirect response====
http://www.google.com/
====will send request====
http://www.google.com.hk/
====redirect response====
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
====will send request====
http://www.google.com/
====redirect response====
(null)
由于是第一次调用 没有进行重定向处理 所以redirect response是null
而想要被发送的请求就是www.google.com
第二次
[html] view
plaincopy
====will send request====
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
====redirect response====
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
====will send request====
http://www.google.com.hk/
====redirect response====
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
- iOS应用通过地址(URL)安装
- 如何定义一个应用之间调用的ios 本地URL
- 如何获得应用在AppStore的URL地址
- Android&iOS:如何在外部启动app(若有安裝APP, 则自动启动app(使用 URL Schema), 若没有安装, 则询问是不是到应用市场下载)
- iOS 通过URL地址来安装应用
- 如何学习ios应用开发?
- iOS: 分步演示如何将iPhone应用移植至iPad平台
- 如何应用autosizing属性使iOS应用程序界面适配iPhone5-消除上下黑边
- 从浏览器或者App调起iOS应用之IOS自定义URL
- ios通过URL地址,从网络上获取图片
- 如何让你的ios app成为最美的应用开发教程
- iOS 如何让IOS应用从容地崩溃
- javascript中url地址之window应用
- IOS应用发布NSLog的如何注释
- 如何修改Laravel中url()函数生成URL的根地址
- iOS应用中如何设置使用的语言
- iOS杂谈14—iOS设备的UDID是什么?苹果为什么拒绝获取iOS设备UDID的应用?如何替代UDID?
- ios通过URL地址,从网络上获取图片