2012-02-07 18 views
6

Tüm HTTP çağrılarını engellemek ve kullanıcı aracısını değiştirmek ve sunucumun gerektirdiği başka bir http başlığı eklemek için NSURLProtocol alt sınıfını kullanıyorum.NSURLProtocol ve karşıya yükleme devam ediyor

-(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; 
} 

My protokol daha sonra bir NSURLConnection

- (void)startLoading 
{ 
self.URLConnection = [NSURLConnection connectionWithRequest:self.innerRequest delegate:self]; 
} 

Sonra eşdeğer NSURLProtocolClient yönteminin çağrısını ileterek NSURLConnection tüm delege yöntemini uygulamak kullanır. Bu genel olarak iyi çalışır ama sunucusuna veri yüklüyorum zaman NSURLConnection kullanıyor benim kod tekrar çağrılmadığı:

bağlantısı: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite:

bu olduğunu anlamak Yükleme ilerlemesini bildirmek için kullanılabilecek eşdeğer NSURLProtocolClient yöntemi olmadığından, bu yöntemi NSURLProtocol'da uygulamadığımdan beri.

Birisi bunun için herhangi bir geçici çözüm buldu mu?

+0

çok ilginç bir sorundur. Bunu yapmak için bir yol buldun mu? – jasongregori

+0

Aynı kullanım durumunda aynı kullanım durumunda. Herhangi bir geçici çözüm bilen var mı? – nyi

cevap

0

bunu bir HTTP POST isteği yapmak için kodunuzu bu satırı ekleyin: özel NSURLProtocol sınıfta nesneyi NSURLConnection nesneyi yüklemek ve temsilci ardından, NSURLConnection ve temsilci nesnesi kaydetmek propertyForKey:inRequest: kullanmak

[lInnerRequest setHTTPMethod:@"POST"]; 
+0

Bu işe yaramıyor. her durumda 'lInnerRequest = [talep mutableCopy];' yöntemi kopyalamış olmalı – terrinecold

-1

kullanın setProperty:forKey:inRequest:, ne zaman veri gönderildi, NSURLConnection nesnesini kullanın ve temsilci yöntemini çağırmak için temsilci