6

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

有人找到解决方法了吗?

4

2 回答 2

0

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

[lInnerRequest setHTTPMethod:@"POST"];
于 2012-02-07T16:22:26.133 回答
-1

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

于 2016-04-05T11:28:14.957 回答