我正在使用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方法。
是否有人为此找到了解决方法?
答案 0 :(得分:0)
将此行添加到您的代码中,使其成为HTTP POST请求:
[lInnerRequest setHTTPMethod:@"POST"];
答案 1 :(得分:-1)
使用setProperty:forKey:inRequest:
保存NSURLConnection
并委托对象,然后在发送数据时使用propertyForKey:inRequest:
加载NSURLConnection
对象并委托自定义NSURLProtocol
类中的对象,使用NSURLConnection
对象和委托来调用委托方法