簡體   English   中英

Objective-C HTTP POST發送請求的形式

[英]objective-c HTTP POST send request as form

我已經使用POST方法在應用程序上調用帶有標頭值和參數的API主體。 服務器僅接受以下格式的表單

"form": {
        "action" : "login",
        "user" : "311"
},

當我們使用代碼

NSString *urlString = [NSString stringWithFormat:@"%@", url_string];

NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSError *error;

NSDictionary *parameters = @{@"action": @"login", @"user": @"311"};
NSString *params = [self makeParamtersString:parameters withEncoding:NSUTF8StringEncoding];
NSData *jsonData2 = [params dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: jsonData2];
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:ourBlock];

我的表格看起來像這樣

form = {
        action = login;
        user = 311;
};

您能否產生想要的結果? 您能幫我解決這個問題嗎?

如何更改這樣的參數。

NSDictionary *parameters = @{@"form":@{@"action": @"login", @"user": @"311"}};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: jsonData];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:ourBlock];

嘗試這個

NSURL * url = [NSURL URLWithString:@"%@",url_string];

NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession * session = [NSURLSession sessionWithConfiguration:config];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

request.HTTPMethod = @"POST";

NSDictionary * paramters = [NSDictionary dictionaryWithObjectsAndKeys:@"login",@"action",@"311",@"user", nil]; // [NSDictionary dictionaryWithObjectsAndKeys:@"value",@"key", nil];


NSDictionary *params = @{@"form": paramters};
NSError *err = nil;
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:params options:0 error:&err];

嘗試

NSString *urlString = [NSString stringWithFormat:@"%@", url_string];

NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSError *error;

NSDictionary *parameters = @{@"action": @"login", @"user": @"311"};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject: parameters options:0 error:&error];

[request setHTTPMethod:@"POST"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: jsonData];
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:ourBlock];
 NSError *error;
 NSDictionary *parameters = @{@"form": @{@"action": @"login", @"user": @"311"}};
 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters 
      options:NSJSONWritingPrettyPrinted error:&error];
 request.HTTPBody = jsonData

 //Using NSURLSession is better option than using NSURLConnection
 NSURLSession *session = [NSURLSession sharedSession];
 NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
  NSHTTPURLResponse* respHttp = (NSHTTPURLResponse*) response;

  if (!error && respHttp.statusCode == 200) {

    NSDictionary* respondData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
    NSLog(@"%@", respondData);

  } else{
    NSLog(@"%@", error);
  }
}];

[dataTask resume];

如果需要base64編碼,請嘗試此

NSMutableDictionary *param = [@{@"form":@{@"action": @"login", @"user": @"311"}} mutableCopy];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:serviceURL];
NSString *strEncoded = [self encodeParameters:param];
NSData *requestData = [strEncoded dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:requestData];
[request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)requestData.length] forHTTPHeaderField:@"Content-Length"];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];


// Function encodeParameters 

+(NSString *)encodeParameters:(NSDictionary *)dictEncode
{
// Encode character set as per BASE64
NSCharacterSet *URLBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"/+=\n"] invertedSet];

NSMutableString *stringEncode = [[NSMutableString alloc] init];
NSArray *allKeys = [dictEncode allKeys];
for (int i = 0;i < allKeys.count; i++) {
    NSString *key = [allKeys objectAtIndex:i];
    if([dictEncode valueForKey:key])
    {
        [stringEncode appendFormat:@"%@=%@",key,[[dictEncode valueForKey:key] stringByAddingPercentEncodingWithAllowedCharacters:URLBase64CharacterSet]];
    }

    if([allKeys count] > i+1)
    {
        [stringEncode appendString:@"&"];
    }
}

return stringEncode;
}

嘗試這個,

NSString *parameters = @"\"form\":{\"action\" : \"login\", \"user\" : \"311\"}";
NSData *jsonData2 = [parameters dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: jsonData2];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:ourBlock];

嘗試AFNetwoking

   NSString *urlString = [NSString stringWithFormat:@"URL"];
   NSDictionary *para=  @{@"action": @"login", @"user": @"311"};
   AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
   manager.responseSerializer = [AFJSONResponseSerializer serializer];
   manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

   [manager POST:urlString parameters:para success:^(AFHTTPRequestOperation *operation, id responseObject) {
                       NSLog(@"JSON: %@", responseObject);

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

    }];

暫無
暫無

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

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