Mobil Programlama

iOS

HTTP işlemleri için AFNetwork

Lisans: Creative Commons 11.12.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

AFNetwork, her türlü HTTP isteğini kolaylıkla gerçekleştirmenizi sağlayan bir kütüphanedir. Basit GET isteklerinden dosya göndermeye kadar uzaktaki bir sunucuyla gerçekleştirebileceğiniz bütün işlemleri sağladığı metodlar yardımıyla hızlıca yapabilirsiniz. AFNetwork bununla beraber sahip olduğu JSON kütüphaneleriyle REST web servisleri de kullanmanızı sağlar. Herhangi bir JSON kaynağı kullanmak için ihtiyacınız olan ilgili metodu çalıştırmak ve servisten gelen cevabı obje halinde görüntülemektir.

AFNetwork'ü projenizde kullanmak için dosyaları bilgisayarınıza indirin ve AFNetworking klasörünü projenize ekleyin. Daha sonrasında projeyi kullanmak istediğiniz dosyada #import “AFNetworking.h” satırını eklemeniz yeterli olacaktır.

İlk olarak basit bir HTTP isteğiyle bir sayfanın içeriğini konsolda yazdıralım;

 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]];
[manager GET:@"http://turkcell.com.tr" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

NSLog(@"Content: %@", [NSString stringWithUTF8String:[responseObject bytes]]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];

 

Yukarıdaki örneğe göz atacak olursak yapılan HTTP istekleri AFHTTPRequestOperationManager üzerinden yönetilir. Burada istek yapıldıktan sonra gelen cevabın otomatik olarak metin ya da JSON işlenmesini setResponseSerializer üzerinden kontrol edebiliriz. Biz bu örnekte http://turkcell.com.tr adresinin içeriğini öğrenmek istediğimizden ve normal web siteleri HTML içerik verdiğinden AFHTTPResponseSerializer'ı kullandık. GET metodu ise istek yapılacak sitenin adresini NSString tipinde kabul eder. Eğer bir parametre göndereceksiniz bunu parameters içerisinde NSDictionary tipinde verebilirsiniz. İşlem bittiğinde karşı sunucunun cevabı success bloğu içerisinde verilecektir. Şayet işlem başarısız olursa failure bloğu içerisinde hata sebepleri görüntülenebilir.

Standart bir HTTP isteğini cevabı responseObject değişkeni içerisinde NSData tipinde döndürülür. Biz burada HTML içerik geleceğini bildiğimizden NSString içerisinde yer alan stringWithUTF8String metodunu kullanarak NSData cevabı metin haline dönüştürüyoruz ve konsola yazıyoruz. Bu işlem sonucunda konsolda web sitesinin içeriği görüntülenecektir.


 

<!doctype html>
<!-->    <html class="no-js iem7"> <![endif]-->
<!--[if (gt IEMobile 7)|!(IEMobile)]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<meta charset="utf-8"/>
<meta name="description" content=""/>
<meta name="author" content=""/>
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="cleartype" content="on" />

 

Bir sonraki örnekte ise basit bir JSON servisine istek gerçekleştiriyoruz. Yapılan istekte ise HTML Header değerlerini değiştireceğiz ve cevap olarak gönderdiğimiz değerleri geri alacağız.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer setValue:@"gelecegiyazanlar" forHTTPHeaderField:@"turkcell"];
[manager POST:@"http://headers.jsontest.com" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];

HTTP Header değerlerini değiştirmek ya da yeni bir değer eklemek için requestSerializer içerisinde yer alan setValue:forHTTPHeaderField: metodundan faydalanırız. Burada turkcell : gelecegiyazanlar ikilisini yapılan isteğin başlığına ekliyoruz. JSON servisi ise bize HTTP Header değerlerini verdiğinden, aldığımız cevapta bu değeri görmemiz gerekir. AFJSONRequestSerializer ise responseObject değişkeninde JSON dönüştürme işlemini bizim için gerçekleştiriyor.

 

2013-11-06 00:06:40.524 iTurkey[8471:70b] JSON: {
Accept = "*/*";
"Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
"Content-Length" = 0;
Host = "headers.jsontest.com";
"User-Agent" = "iTurkey/1.0 (iPhone Simulator; iOS 7.0.3; Scale/2.00)";
turkcell = gelecegiyazanlar;
}

 

Projenin adresi: https://github.com/AFNetworking/AFNetworking