首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在NSURLProtocol中的startLoading内部单独调用

在NSURLProtocol中的startLoading内部单独调用
EN

Stack Overflow用户
提问于 2015-12-10 16:11:22
回答 1查看 159关注 0票数 0

在提交原始请求之前,我正尝试在startLoading()内部进行单独的http调用。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+canInitWithRequest(){
   if(self.request.valueForKey("handledKey") != nil){
      return false;
   }
   return true;
}

-startLoading(){

   __block NSString * realURLString = self.request.URL.absoluteString;

   //send separate http call for validation

   NSMutableURLRequest validationRequest = [NSMutableURLRequest initWithURL:[URL initWithString:OUR_VALIDATION_SERVER_URL]];

   {code to fill info into validationRequest, etc.}   

   semaphore = dispatch_semaphore_create(0); // need to sync to make sure we use the expected/real url
   [NSURLProtocol setValue:YES forkey:"handledKey" inRequest: validationRequest];
   [NSURLSession sendAsyncRequest:validationRequest ...completionHandler(response, data, error){
            realURLString = xxxx;
            print(current thread info);// line 1
       dispatch_semaphore_signal(sema);
   }];
   print(current thread info);// line 2
   dispatch_semaphore_wait(sema);

  //continue original request with real url
  NSMutableURLRequest realRequest = NSMutableURLRequest(realURLString);
  [NSURLProtocol setValue:YES forkey:"handledKey" inRequest: realRequest];
  self.connection = [NSURLSession withRequst:realRequest delegate:self];
}

}

如果在任何一个普通内容(htm, css, etc的webView中使用,同样的代码也是有效的。)情况1或m3u8/mpg case 2

但是,如果直接与AVPlayer一起使用来播放相同的m3u8案例3,则在canInitWithRequest()方法之后,验证调用将停滞约1分钟(如果查找错误,则会出现请求超时)。并随后呈现以下请求失败。

一开始我以为是线程问题。但是第一行和第二行给出了不同的线索。

我怀疑AVPlayer使用了与webView不同的机制来处理http请求。在第二种情况下,webView可能只是覆盖了AVPlayer。但不确定。

有人能给出更多的见解吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-05-08 03:02:21

你很可能阻塞了主线程。startLoading()方法需要立即返回。它永远不会因为任何原因而阻塞。启动您的身份验证请求,然后返回。在信号量等待之后获取所有代码,并将其移动到完成处理程序中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34206598

复制
相关文章
NSURLPtotocol 网络hooker
如图所示,URL Loading System是iOS一系列网络请求类的集合,包括已经过期不用的NSConnection和现在流行的NSURLSession,还包括一些请求认证的类,一个sessionConfig的类,还有关于处理请求缓存的类等,当然还包括我们要说的这个NSURLProtocol类。
CC老师
2023/03/23
4140
NSURLPtotocol 网络hooker
iOS开发之NSURLProtocol的那些坑
接触过iOS系统中URL Loading System都知道,NSURLProtocol是如此地强大,可以拦截应用内几乎所有的网络请求(除了WKWebView),并可以修改请求头,返回client任意自定义的数据等等,据说很多做网络缓存都是利用这个类的。 那么,首先讲解一下NSURLProtocol怎么使用吧。 1. 定义一个NSURLProtocol的子类 在继承NSURLProtocol中,我们需要实现 + (BOOL)canInitWithRequest:(NSURLRequest *)request
forrestlin
2018/05/24
2.6K0
python 中单独调用 django 的数据库模块
玉面小色熊
2017/07/28
3.9K0
python 中单独调用 django 的数据库模块
SpringBoot 中 AOP 的内部调用陷阱!
今天我们聊一个 AOP 切面技术,起因是微信群里一位网友遇到了一个自定义注解未生效问题,看起来就是和 @Transactional 未生效一样。
业余草
2021/12/06
6170
SpringBoot 中 AOP 的内部调用陷阱!
java 内部类 静态方法调用_内部类和静态内部类的调用「建议收藏」
public static void main(String[] args) {
全栈程序员站长
2022/11/10
1K0
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.7K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.1K0
在Java中调用Python
NSURLProtocol 对 WKWebView 的处理
之前写过一篇文章是关于基于 NSURLProtocol 做的 DNS 解析,其中对 NSURLProtocol 也有了简单的介绍,我们都知道他可以拦截所有基于 URL Loading System 中的请求,但是对于 WKWebview 里面所发出的请求即使他是 http/https 也无能为力,先来简单的了解下 WKWebView.
molier
2022/11/03
1.5K0
NSURLProtocol 对 WKWebView 的处理
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
全栈程序员站长
2022/07/05
1.9K0
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
欢醉
2018/01/22
2.3K0
BackgroundWorker在单独的线程上执行操作
直接使用多线程有时候会带来莫名其妙的错误,不定时的发生,有时候会让程序直接崩溃,其实BackgroundWorker 类允许您在单独的专用线程上运行操作。可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。
张果
2022/05/09
1.2K0
BackgroundWorker在单独的线程上执行操作
DNS在远程调用执行中的应用
纯属蹭log4j2热度文,和安全没有直接的关系,本文只谈DNS以及日志应用; 通过dnslog.cn的截图,分析dnslog.cn的原理,基于此,介绍了可以获取更多信息的ceye的功能;在应用场景上,我们通过该原理提供了用户出口IP同本地DNS递归出口IP的对应关系,延伸出了排障场景和数据分析场景。
hermanzeng
2021/12/14
6K3
DNS在远程调用执行中的应用
OVSDB介绍及在OpenDaylight中的调用
前言 OVS是一种开源的软件交换机,可安装于通用的虚拟服务器环境中,在虚拟环境中单个、多个物理机上的不同虚拟主机都需要通过OVS实现数据交换。 OVS包含三个重要的组件:ovsdb-server、
SDNLAB
2018/03/29
4.9K1
OVSDB介绍及在OpenDaylight中的调用
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.2K0
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.2K0
函数在栈中的调用过程
栈是一种线性存储的数据结构,向下增长。其存在栈底和栈顶,栈对其中的数据元素有进栈和出栈的操作,遵循‘First In last Out’即FILO原则。
Elapse
2020/08/17
3.9K0
Java中,匿名内部类在开发中的使用以及匿名内部类的面试题
  我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。   而这个时候,我们知道实际需要的是一个子类的对象。 如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。
黑泽君
2018/10/11
1.5K0
在C++中模拟JAVA内部类的方法
有时候我们需要把一批互相关联的API用不同的类提供给用户,以便简化每个类的使用难度。但是这样这些类之间的数据共享就成了问题。JAVA的内部类可以自由的访问外围类的所有数据,所以很时候做这的工作,而如果C++也这样做,就变成要增加很多setter和getter。但是,也可以用以下方法模拟实现: 首先,你的内部类头文件一般是被外围类所#include的,所以需要在内部类的声明前增加“前置声明”: namespace outerspace{ class OuterClass; } 然后,再设置一个指向外部类的指针
韩伟
2018/03/05
2K0
在C++中模拟JAVA内部类的方法
点击加载更多

相似问题

NSURLProtocol - startLoading未被调用

12

为什么在我的startLoading子类中不调用NSURLProtocol?

33

NSURLProtocol::startLoading是否应为异步

21

NSURLProtocol canInitWithRequest:多次调用

11

NSURLProtocol。requestIsCacheEquivalent从未调用过

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文