Objective C - POST data using NSURLConnection

后端 未结 4 1023
独厮守ぢ
独厮守ぢ 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
    }
    

提交回复
热议问题