Ada beberapa cara untuk melakukannya. Pertama, penting untuk diperhatikan bahwa dataWithContentsOfURL
bukan permintaan asinkron. Artinya, jika Anda menggunakannya untuk mentransfer data besar, ada kemungkinan besar Anda akan membekukan aplikasi. Untuk permintaan asinkron, Anda harus menggunakan NSURLRequest.
Karena itu, ada API yang sangat baik untuk mengunggah/mengunduh data secara tidak sinkron. Salah satu yang sangat sering digunakan, dan didokumentasikan dengan baik adalah AFNetworking . Ini dikodekan di atas NSURLRequest.
Misalnya, di PHP Anda, Anda dapat mengambil bidang dari pernyataan POST seperti ini:
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
Di aplikasi Anda, Anda dapat memanggil skrip PHP dengan permintaan POST di AFNetworking sebagai berikut:
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];