繁体   English   中英

在Objective-c中使用AFNetworking 3.0进行GET请求

[英]GET request with AFNetworking 3.0 in Objective-c

我正在努力基于Windows旧版本为iOS创建一个应用程序。 因此,在登录应用程序时,我需要连接到传递用户,传递和app_version的Web服务。 我要400,所以我在某处失败了。 这是我的代码:

static NSString *const BASE_URL = @"my://url";

static NSString *const SUBDIRECTORY = @"/api/v1";

static NSString *const API_NAME = @"Basic";

static NSString *const API_KEY = @"mykey";

- (void)logUserWithName:(NSString *)user
           password:(NSString *)password
       successBlock:(void(^)(void)) successBlock
          failBlock:(void(^)(NSError *error)) failBlock {

    NSDictionary *body = @{@"user" : user,
                       @"pass" : password,
                       @"app_version" : @"1.0"
                       };
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    NSString *auth = [[API_NAME stringByAppendingString:@" "] stringByAppendingString:API_KEY];
    NSString *URL = [[BASE_URL stringByAppendingString:SUBDIRECTORY] stringByAppendingString:@"/auth"];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSMutableURLRequest * req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"GET" URLString:URL parameters:nil error:nil];
    [req setValue:auth forHTTPHeaderField:@"Authorization"];
    [req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    req.timeoutInterval = [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"Reply JSON: %@", responseObject);
            successBlock();
        } else {
            NSLog(@"Error: %@, %@, %@", error, response, responseObject);
            failBlock(error);
       }
   }] resume];
}

在这里,我在Windows应用程序中实现了相同的操作,该操作正常进行:

    private const String BASE_URL = @"my://url";

    private const String SUBDIRECTORY = "/api/v1";

    private static String API_NAME = "Basic";
    //private static String API_KEY = "exampleAPI_KEY";
    private static String API_KEY = "mykey";

    private static String AUTH = API_NAME + " " + API_KEY;

    private const String NETWORK_ERROR = "Network error";

    private const String ERROR = "Error ";

    // all operation returns error_code and error_message

    //returns an array[] de un elemento{} user_token
    public static async Task<UserToken> Login(string User, string Pass, string App_version)
    {
        var Client = new RestClient(new Uri(BASE_URL));
        Client.IgnoreResponseStatusCode = true;
        var Request = new RestRequest(SUBDIRECTORY + "/auth", Method.GET);
        Request.AddHeader("Authorization", AUTH);
        Request.AddParameter("Content-type", "application/json", ParameterType.HttpHeader);
        Request.AddParameter("user", User, ParameterType.GetOrPost);
        Request.AddParameter("pass", Pass, ParameterType.GetOrPost);
        Request.AddParameter("app_version", App_version, ParameterType.GetOrPost);
        var Response = await Client.Execute<UserToken>(Request);
        var ResponseData = Response.Data;
        if (Response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            return ResponseData;
        }

尝试这个

 NSString *urlAsString = @"http://------------";

 NSURL *url = [NSURL URLWithString:urlAsString];

 NSMutableURLRequest *urlRequest = [NSMutableURLRequest   requestWithURL:url];
 [urlRequest setTimeoutInterval:30.0f];
 [urlRequest setHTTPMethod:@"POST"];

 NSString *body =[NSString stringWithFormat:@"apiKey=%@&platform=%@",@"param1",@"param2"];

 [urlRequest setHTTPBody:[body   dataUsingEncoding:NSUTF8StringEncoding]];
 NSOperationQueue *queue = [[NSOperationQueue alloc] init];
 [NSURLConnection
  sendAsynchronousRequest:urlRequest
  queue:queue
  completionHandler:^(NSURLResponse *response,
                 NSData *data,
                 NSError *error) {
   if ([data length] >0 && error == nil){

     NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];




     NSLog(@"getConfig respo is : %@",responseDict);

     if(responseDict!=nil)
     {

         if([[responseDict valueForKey:@"Status"] integerValue] == 200)
         {
             NSLog(@"getConfig success");



         }

         else
         {




         }

     }
     else
     {
         NSLog(@"getConfig nil Dic ");
     }

 }
 else
 {
     NSLog(@"getConfig error : %@",error);


 }

 }];


 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM