簡體   English   中英

如何有效地設置http正文請求?

[英]How to set http body request efficiently?

在我的應用程序中,我正在從每個viewcontroller發送http請求。 但是,當前我正在實現一個類,該類應該具有發送請求的方法。

我的要求參數數量不一。 例如,要獲取tableview的事物列表,我需要將category,subcategory,filter和另外5個參數放入請求中。

這就是我現在的要求:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
         [request setValue:verifString forHTTPHeaderField:@"Authorization"]; 
         [request setURL:[NSURL URLWithString:@"http://myweb.com/api/things/list"]];
         [request setHTTPMethod:@"POST"];
         [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

         NSMutableString *bodyparams = [NSMutableString stringWithFormat:@"sort=popularity"];
         [bodyparams appendFormat:@"&filter=%@",active];
         [bodyparams appendFormat:@"&category=%@",useful];
         NSData *myRequestData = [NSData dataWithBytes:[bodyparams UTF8String] length:[bodyparams length]];
[request setHTTPBody:myRequestData]

我的第一個想法是創建方法,接受所有這些參數,那些不需要的參數將為零,然后我將測試哪些是nil,而不是nil的那些將被附加到參數字符串(ms)。

然而,這是非常低效的。 后來,我開始考慮傳遞一些帶有參數存儲值的字典。 類似於帶有nameValuePair的數組列表,在Android的Java中使用過。

我不確定,我如何從字典中獲取密鑰和對象

    -(NSDictionary *)sendRequest:(NSString *)funcName paramList:(NSDictionary *)params 
{
  // now I need to add parameters from NSDict params somehow
  // ?? confused here :)   
}

您可以使用以下內容從字典構造params字符串:

/* Suppose that we got a dictionary with 
   param/value pairs */
NSDictionary *params = @{
    @"sort":@"something",
    @"filter":@"aFilter",
    @"category":@"aCategory"
};

/* We iterate the dictionary now
   and append each pair to an array
   formatted like <KEY>=<VALUE> */      
NSMutableArray *pairs = [[NSMutableArray alloc] initWithCapacity:0];
for (NSString *key in params) {
    [pairs addObject:[NSString stringWithFormat:@"%@=%@", key, params[key]]];
}
/* We finally join the pairs of our array
   using the '&' */
NSString *requestParams = [pairs componentsJoinedByString:@"&"];

如果您記錄requestParams字符串,您將獲得:

過濾= aFilter&類別= aCategory&排序=東西

PS我完全同意@rckoenes的說法, AFNetworking是這種操作的最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM