我正在使用 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 方法。
有人找到解决方法了吗?