【问题标题】:NSURLProtocol and post upload progressNSURLProtocol 和 post 上传进度
【发布时间】: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


【解决方案1】:

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

[lInnerRequest setHTTPMethod:@"POST"];

【讨论】:

  • 这不起作用。在任何情况下lInnerRequest = [request mutableCopy]; 都应该复制该方法
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多