Soru AFNetworking 2.0 kullanarak JSON verilerini gönderme


JSON dizesini HTTP POST isteğiyle girdi olarak kabul eden bir web komut dosyası var. Birkaç AFNetworking 1.x örneğine rastladım, lütfen bana işaret eden herhangi bir kullanıcı için bir web komut dosyasına HTTP POST isteğinde bulunmak için AFNetworking 2.0 örneğini işaret edebilir mi?

Teşekkürler


44
2018-01-31 18:15


Menşei


AFNetworking github sayfasındaki geçiş kılavuzunu okuyun. - Wain
sorun AFNetworking için yeniyim, bu yüzden ASIHTTP arka planından geldiğim önceki versiyonları gerçekten bilmiyorum ve anladım. - vishal dharankar
Bunun hakkında bir fikrin var mı? - vishal dharankar
JSON ve POST için ara cocoadocs.org/docsets/AFNetworking/2.1.0 Bir şey denemelisin ve sonra yardım isteyin ... - Wain
@wain Keşke bir acemi bile anlayacak kadar açık olsaydı - vishal dharankar


Cevaplar:


Dokümanları aradıktan sonra ve bazı kodları denedikten sonra bir örnek olarak takip ettim

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];


NSDictionary *params = @ {@"user" :txtUserName, @"pwd" :txtPwd };


[manager POST:URL_SIGNIN parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSLog(@"JSON: %@", responseObject);
}
failure:
 ^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"Error: %@", error);
 }];

Ayrıca sunucu komut dosyasında Application / json olarak yanıt üstbilgi türünü de ayarlamayı unutmayın.


79
2018-02-10 08:21



Bu benim için işe yaramadı. Bu hata durum kodunu almaya devam ediyorum: 200, üstbilgiler {Bağlantı = close; "İçerik Uzunluğu" = 59; "İçerik Türü" = "metin / html; charset = UTF-8"; Tarih = "Pzt, 21 Nis 2014 06:44:34 GMT"; Sunucu = "Apache / 2.2.25 (Amazon)"; "X-Powered-By" = "PHP / 5.3.27"; }}, NSLocalizedDescription = İstek başarısız oldu: kabul edilemez içerik türü: text / html} - Nitesh
@Nitesh cevabındaki son ifademi görmezden geldin :) "Ayrıca sunucu betiğinde Application / json olarak yanıt üstbilgi türünü de ayarlamayı unutma" - vishal dharankar
Kontrol edebilirsin bu cevap JSON ayrıştırıcısının "text / html" içerik türünü kabul etmesi için olamaz Sunucu betiğini değiştir. - mgarciaisaia
@mgarciaisaia yanıt türünü metin / html olarak ayarlama ve JSON gönderme kötü bir uygulama değildir, standart API bunu yapar. - vishal dharankar
Bu benim için de çalışmıyor. "JSON metni dizi veya nesne ve parçaların ayarlanmasına izin verme seçeneği ile başlamadı." - Olcay Ertaş


Burada saklanan POST parametreleri için bazı basit şablon NSMutableDictionary JSON biçimindeki parametreler. AFNetworking ile çalışır. 2.4.1.

NSString *baseURL = @"http://your-server.com/";
NSString *path = @"method/url/";

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:@"value" forKey:@"key"];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager POST:path parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {

        NSLog(@"JSON: %@", responseObject);
        //here is place for code executed in success case

} failure:^(NSURLSessionDataTask *task, NSError *error) {

        //here is place for code executed in error case
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error while sending POST"
                                                            message:@"Sorry, try again."
                                                           delegate:nil
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:nil];
        [alertView show];

        NSLog(@"Error: %@", [error localizedDescription]);
}];

20
2017-09-16 13:21



Emin değilim, ama bu artık çalışmıyor. Lütfen bunu kontrol edin soru. - Hemang
AFNetworking'in daha yeni sürümü için kontrol etmedim. Kesinlikle 2.4.1 sürümü üzerinde çalışır. - lukszar
Peki ! Teşekkürler. - Hemang


Eğer json'u sunucuya göndermek istiyorsanız, parametrelerinizi aşağıdaki şekilde kullanmalısınız.

Bu şekilde, istek başlığındaki "İçerik Türü" nü "uygulama / json" olduğunu öğrenebilirsiniz.

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

 NSDictionary *paras = @{@"uid" : @(10020)};

[manager POST:@"http://your.request.url" parameters:paras success:^(AFHTTPRequestOperation *operation, id responseObject) {



}failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"the falire is %@", error);

}];

Bu yardımcı olabilir. :)


8
2018-05-25 02:16



Bu çalıştı, teşekkürler. Lütfen cevaplarımı da değerlendirin :) - Muhammad Ahsan


Hızlı:

Bunu ekle manager.AFHTTPRequestOperationManager

manager.requestSerializer = AFJSONRequestSerializer(writingOptions: NSJSONWritingOptions.PrettyPrinted)

5
2017-08-19 19:04





Eğer parametre sözlüğü göndermek istiyorsanız json dize aşağıdaki kodu kullanın

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"your_webservice_post_url"]];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSDictionary *parameters = @{@"customValue":@"value"};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
 [urlRequest setHTTPMethod:@"POST"];
 [urlRequest setHTTPBody:jsonData];

1
2018-04-28 13:14