2012-02-07 35 views
6

Tôi đang sử dụng lớp con của NSURLProtocol để chặn tất cả cuộc gọi HTTP và sửa đổi tác nhân người dùng cũng như thêm tiêu đề http khác do máy chủ của tôi yêu cầu.Tiến trình NSURLProtocol và đăng tải lên

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

giao thức của tôi sau đó sử dụng một NSURLConnection

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

Sau đó tôi thực hiện tất cả các phương pháp đại biểu trong NSURLConnection bằng cách chuyển tiếp cuộc gọi đến phương pháp NSURLProtocolClient tương đương. này hoạt động tốt nói chung nhưng khi tôi đang tải dữ liệu đến máy chủ, mã của tôi được sử dụng NSURLConnection không được gọi trở lại vào lúc:

kết nối: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite:

Tôi hiểu tại sao điều này là vì tôi đã không thực hiện phương thức đó trong NSURLProtocol vì không có phương thức NSURLProtocolClient tương đương có thể được sử dụng để báo cáo tiến độ tải lên.

Có ai đó tìm thấy bất kỳ giải pháp nào cho việc này không?

+0

đây là một vấn đề rất thú vị. bạn đã bao giờ tìm ra cách để làm điều này? – jasongregori

+0

Có cùng vấn đề với trường hợp sử dụng chính xác tương tự. Có ai biết cách giải quyết nào không? – nyi

Trả lời

0

thêm dòng này vào mã của bạn để làm cho nó một yêu cầu HTTP POST:

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

Điều này không hoạt động. trong mọi trường hợp 'lInnerRequest = [request mutableCopy];' nên đã sao chép phương thức – terrinecold

-1

Sử dụng setProperty:forKey:inRequest: để lưu NSURLConnection và đối tượng delegate, sau đó sử dụng propertyForKey:inRequest: để tải NSURLConnection đối tượng và giao đối tượng trong tùy chỉnh NSURLProtocol lớp, khi dữ liệu được gửi, sử dụng đối tượng NSURLConnection và ủy quyền để gọi phương thức ủy nhiệm

Các vấn đề liên quan