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:
アップロードの進行状況を報告するために使用できる同等の NSURLProtocolClient メソッドがないため、NSURLProtocol にそのメソッドを実装しなかったため、これがなぜなのかを理解しています。
誰かがこれに対する回避策を見つけましたか?