NSURLProtocol和上传后进度

时间:2012-02-07 16:17:54

标签: ios nsurlconnection nsurlprotocol

我正在使用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方法。

是否有人为此找到了解决方法?

2 个答案:

答案 0 :(得分:0)

将此行添加到您的代码中,使其成为HTTP POST请求:

[lInnerRequest setHTTPMethod:@"POST"];

答案 1 :(得分:-1)

使用setProperty:forKey:inRequest:保存NSURLConnection并委托对象,然后在发送数据时使用propertyForKey:inRequest:加载NSURLConnection对象并委托自定义NSURLProtocol类中的对象,使用NSURLConnection对象和委托来调用委托方法