【发布时间】:2012-02-29 02:06:29
【问题描述】:
我正在使用 NSURLProtocol 的子类来拦截所有 HTTP 调用并修改用户代理以及添加我的服务器所需的其他 http 标头。
-(id)initWithRequest:(NSURLRequest *)request
cachedResponse:(NSCachedURLResponse *)cachedResponse
client:(id <NSURLProtocolClient>)client
{
NSMutableURLRequest* lInnerRequest;
//************************************************
lInnerRequest = [request mutableCopy];
[lInnerRequest setValue:@"MyUserAgent" forHTTPHeaderField:@"User-Agent"];
//************************************************
self = [super initWithRequest:lInnerRequest
cachedResponse:cachedResponse
client:client];
//************************************************
if (self)
{
self.innerRequest = lInnerRequest;
}
//***********************************00*************
[lInnerRequest release];
//************************************************
return self;
}
然后我的协议使用 NSURLConnection
- (void)startLoading
{
self.URLConnection = [NSURLConnection connectionWithRequest:self.innerRequest delegate:self];
}
然后我通过将调用转发到等效的 NSURLProtocolClient 方法来实现 NSURLConnection 中的所有委托方法。 这通常效果很好,但是当我将数据上传到服务器时,我使用 NSURLConnection 的代码不会被回调:
连接:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
我明白为什么会这样,因为我没有在 NSURLProtocol 中实现该方法,因为没有可用于报告上传进度的等效 NSURLProtocolClient 方法。
有人找到解决方法了吗?
【问题讨论】:
-
这是一个非常有趣的问题。你有没有找到一种方法来做到这一点?
-
在完全相同的用例中遇到同样的问题。有谁知道任何解决方法?
标签: ios nsurlconnection nsurlprotocol