Objective C - POST data using NSURLConnection

后端 未结 4 1022
独厮守ぢ
独厮守ぢ 2021-02-10 17:33

I\'m very slowly working my way through learning the URL loading system for iOS development, and I am hoping someone could briefly explain the following piece of code:



        
相关标签:
4条回答
  • 2021-02-10 18:13
    Step 1 : set URL definitions:
    
    // Create the request
    
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://192.168.0.232:8080/xxxx/api/Login"]];
    
        // Specify that it will be a POST request
        request.HTTPMethod = @"POST";
    
        // This is how we set header fields
        [request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    
        NSMutableDictionary *postDict = [[NSMutableDictionary alloc] init];
    
        [postDict setValue:@"Login" forKey:@"methodName"];
        [postDict setValue:@"admin" forKey:@"username"];
        [postDict setValue:@"123456" forKey:@"password"];
        [postDict setValue:@"mobile" forKey:@"clientType"];
    
    
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postDict options:0 error:nil];
    
        // Checking the format
        NSString *urlString =  [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    
        // Convert your data and set your request's HTTPBody property
        NSString *stringData = [[NSString alloc] initWithFormat:@"jsonRequest=%@", urlString];
    
        //@"jsonRequest={\"methodName\":\"Login\",\"username\":\"admin\",\"password\":\"12345678n\",\"clientType\":\"web\"}";
    
        NSData *requestBodyData = [stringData dataUsingEncoding:NSUTF8StringEncoding];
    
        request.HTTPBody = requestBodyData;
    
        // Create url connection and fire request
        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    
        if (!theConnection) {
    
            // Release the receivedData object.
            NSMutableData *responseData = nil;
    
            // Inform the user that the connection failed.
        }
    
    Step 2: 
    
    // Declare the value for NSURLResponse URL
    
    //pragma mark NSURLConnection Delegate Methods
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        // A response has been received, this is where we initialize the instance var you created
        // so that we can append data to it in the didReceiveData method
        // Furthermore, this method is called each time there is a redirect so reinitializing it
        // also serves to clear it
        _responseData = [[NSMutableData alloc] init];
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        // Append the new data to the instance variable you declared
        [_responseData appendData:data];
    
        NSError *error=nil;
    
        // Convert JSON Object into Dictionary
        NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:_responseData options:
                              NSJSONReadingMutableContainers error:&error];
    
    
    
        NSLog(@"Response %@",JSON);
    }
    
    - (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                      willCacheResponse:(NSCachedURLResponse*)cachedResponse {
        // Return nil to indicate not necessary to store a cached response for this connection
        return nil;
    }
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        // The request is complete and data has been received
        // You can parse the stuff in your instance variable now
    
    }
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
        // The request has failed for some reason!
        // Check the error var
    }
    
    0 讨论(0)
  • 2021-02-10 18:30

    The first line created an string, it can be replaced with:

    NSString *myParameters = @"one=two&three=four";
    

    It's written in initWithFormat so you can extend it to assign parameter value.

    Second line indicate this is HTTP post request.

    The third line, setHTTPBody method take NSData type, so you need to convert string type to NSData using dataUsingEncoding method.

    0 讨论(0)
  • 2021-02-10 18:38

    This is a pretty simple HTTP request setup; if you have more specific questions you might do better asking those.

    NSString *myParameters = @"paramOne=valueOne&paramTwo=valueTwo";
    

    This sets up a string containing the POST parameters.

    [myRequest setHTTPMethod:@"POST"];
    

    The request needs to be a POST request.

    [myRequest setHTTPBody:[myParameters dataUsingEncoding:NSUTF8StringEncoding]];
    

    This puts the parameters into the post body (they need to be raw data, so we first encode them as UTF-8).

    0 讨论(0)
  • 2021-02-10 18:38
    please use below code.
    +(void)callapi:(NSString *)str withBlock:(dictionary)block{
    
    NSData *postData = [str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
    
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@“%@/url”,WebserviceUrl]]
                                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                          timeoutInterval:120.0];
    
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [urlRequest setHTTPBody:postData];
    
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
     {
         if (!data) {
             NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
              [dict setObject:[NSString stringWithFormat:@"%@",AMLocalizedString(SomethingWentWrong, nil)] forKey:@"error"];
             block(dict);
             return ;
         }
         NSError *error = nil;
         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
         //////NSLog(@"%@",dict);
         if (!dict) {
             NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
             [dict setObject:AMLocalizedString(ServerResponceError, nil) forKey:@"error"];
             block(dict);
             return ;
         }
         block(dict);
    
     }];
    }
    
    0 讨论(0)
提交回复
热议问题