2013-03-22 55 views
0

我試圖使用AFNetworking來發布XML-RPC請求。 AFNetworking函數庫僅爲表單數據提供節流( AFMultipartFormData)。用AFNetworking調節POST

如何節流常規NSData POST請求?

這是我的當前代碼:

XMLRPCEncoder* encodObject = [[XMLRPCEncoder alloc] init]; 
[encodObject setMethod:function withParameters:[NSArray arrayWithArray:parametrs]]; 

NSMutableURLRequest *request = [afClient requestWithMethod:@"POST" 
                 path:path 
               parameters:Nil]; 

NSData* body = [[encodObject encode] dataUsingEncoding:NSUTF8StringEncoding]; 
[request setHTTPBody:bodyRequest]; 

AFHTTPRequestOperation* operationAf = 
    [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

[operation setCompletionBlockWithSuccess: 
    ^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSString* response = operation.responseString; 
     NSLog(@"response %@,response"); 

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error%@", [error localizedDescription]); 

    }]; 
+1

你想有一個延遲發送二進制文件時只使用限制,你想限制數據包大小或者你想兩個都做? – 2013-03-22 17:20:35

回答

2

AFHTTPClient -multipartFormRequestWithMethod:...是,需要一個塊與該構建體對於相關聯的請求的自定義的輸入流的代理對象的方法。 throttleBandwidthWithPacketSize是用於阻止3G網絡上的緩衝區溢出的塊代理對象的方法,並且僅在發佈像圖像這樣的二進制數據時才真正需要。

使用setHTTPBody:覆蓋任何與-multipartFormRequestWithMethod:完成,因爲它取代了NSData HTTP身體爲NSURLRequest構造的輸入流。您應該這樣做,除非您確實需要將其作爲多部分請求發送(即使用圖像/文件附件)。

如果您確實需要multipart,請在構造器塊中使用-appendPartWithFormData:name:

+0

是的,但如果我只使用[formData throttleBandwidthWithPacketSize:kAFUploadStream3GSuggestedPacketSize delay:kAFUploadStream3GSuggestedDelay];並使用setHTTPBody節流將完成? – sharedMind 2013-03-25 11:41:49

+0

請停止在關閉的GitHub問題上覆制您的評論。 – mattt 2013-03-25 16:39:48

+0

@mattt:首先...對不起,我沒有檢查github中的所有評論/問題。這可能是一個騙局,但請讓我知道如果非多部分節流?有沒有像ASI那樣更容易使用的方法(只需調用方法並完成)? – 2015-10-27 16:02:43

0

我認爲AFNetWorking不支持像ASIHttpRequest節流,將其與multipartFormRequestWithMethod功能:)