それを行うにはいくつかの方法があります。まず、dataWithContentsOfURL
に注意することが重要です。 非同期リクエストではありません。つまり、大きなデータを転送するために使用すると、アプリがフリーズする可能性が高くなります。非同期リクエストの場合は、NSURLRequestを使用する必要があります。
そうは言っても、データを非同期でアップロード/ダウンロードするための優れたAPIがあります。非常に頻繁に使用され、十分に文書化されているのは、AFNetworking です。 。これはNSURLRequestの上にコーディングされています。
たとえば、PHPでは、次のようにPOSTステートメントからフィールドを取得できます。
<?php
$username = $_POST["username"];
$email = $_POST["email"];
?>
アプリでは、次のようにAFNetworkingのPOSTリクエストでPHPスクリプトを呼び出すことができます。
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];