我有一个URL:http://listen.streamonomy.com/cooljazzflorida(例如(。这是我在 PLS 文件(由 SHOUTcast 无线电提供(中解析的用于流式传输音频的 URL。当我从浏览器(Safari 或谷歌浏览器(打开它时,此 URL 被重定向到 http://streaming.shoutcast.com/cooljazzflorida?lang=fr-fr 我可以播放流。
但是,在我的iOS应用程序中,使用UIWebView或WKWebView,重定向的URL是 http://streaming.shoutcast.com/cooljazzflorida_64?lang=fr-fr(然后使用_64(,与浏览器不同,并且我有错误"找不到您需要的文件"。
请问有什么想法吗?谢谢。
编辑:说明问题的示例代码:
https://github.com/iDevelopper/RedirectURLSample.git
#import "ViewController.h"
@interface ViewController () <UIWebViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
webView.delegate = self;
[self.view addSubview:webView];
NSString *urlString = @"http://listen.streamonomy.com/cooljazzflorida";
/* If you enter this url using Safari browser, the redirected url is:
http://streaming.shoutcast.com/cooljazzflorida?lang=fr-fr
*/
NSURL *urlToPlay = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:urlToPlay];
[webView loadRequest:request];
}
#pragma mark - UIWebView Delegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSURL *url = [webView.request mainDocumentURL];
NSLog(@"DID FINISH The Redirected URL is: %@", url);
/*
The redirected url is: (not the same returned by the browser and this url is not found)
http://streaming.shoutcast.com/cooljazzflorida_64?lang=en-us
*/
// Set AVPlayerItem with the redirected URL
// ...
}
@end
_64
地址确实不存在,Streamonomy 还没有注意到它并修复他们的重定向逻辑是 Streamonomy 的错。不同的重定向目标基于请求中的User-Agent
标头。我怀疑 Streamonomy 正在尝试猜测请求设备并查询不同的比特率。我给你找了两个例子:
Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C89 Safari/602.1
重定向到现有网址
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1
重定向至不存在的_64
去弄清楚确切的阈值是多少:-(同样值得注意的是,设置一个完全虚假的 UA 喜欢ignoremeidontneedyourhelp
重定向到"正确"(现有(的 URL。但是,如果您打算使用该UI/WKWebView进行正常的公共Web浏览,则这不是一个有用的策略。网站可能会奇怪地呈现或以其他方式损坏。