Er zijn verschillende manieren om het te doen. Ten eerste is het belangrijk op te merken dat dataWithContentsOfURL
is geen asynchroon verzoek. Dit betekent dat als je het gebruikt om grote gegevens over te zetten, de kans groot is dat je de app bevriest. Voor asynchrone verzoeken moet u de NSURLRequest gebruiken.
Dat gezegd hebbende, zijn er uitstekende API's om gegevens asynchroon te uploaden / downloaden. Een die zeer vaak wordt gebruikt en goed gedocumenteerd is, is AFNetworking . Dit is gecodeerd bovenop NSURLRequest.
In uw PHP kunt u bijvoorbeeld de velden uit een POST-statement als volgt ophalen:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
In uw app kunt u het PHP-script met een POST-verzoek in AFNetworking als volgt aanroepen:
NSString *username = @"username";
NSString *email = @"email";
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"yourUrl" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSLog(@"Sending POST request to server");
[formData appendPartWithFormData:[username dataUsingEncoding:NSUTF8StringEncoding] name:@"username"];
[formData appendPartWithFormData:[email dataUsingEncoding:NSUTF8StringEncoding] name:@"email"];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"SERVER UPLOAD FRACTION COMPLETED: %f", uploadProgress.fractionCompleted);
});
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSLog(@"responseObject %@", responseObject);
NSString *responseString = [[[NSString alloc] initWithData:responseObject encoding:NSASCIIStringEncoding] mutableCopy];
NSLog(@"The respose is: %@", responseString);
if(error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"The response is: %@", responseString);
// Do something with the response
}
}];
[uploadTask resume];