Получение 401 в запросе PATCH, отправленном с помощью AFNetworking/RestKit, но 202, отправленном из браузера

Итак, у меня есть этот RESTful API, работающий поверх моего сервера Django с помощью Tastypie. Итак, я делаю следующий код из javascript, и все работает нормально.

       var newData = {};
       newData["content"] = "This is a new test";
       $.ajax({ 
           type: 'patch',
           contentType: "application/json; charset=utf-8",
           url: "/api/rest/sopsteps/17/",
           data: JSON.stringify(newData),
           dataType: "json",                    
           success: function(data, status) {
               alert("success");
           },
           error: function(data, status){
               alert(data + " STATUS : " + status);
           },
       });                

Теперь, если я делаю следующее с помощью AFNetworking/RestKit, я всегда получаю 401 ответ.

[26/дек/2012 16:20:20] "ИСПРАВЛЕНИЕ /api/rest/sopsteps/17/HTTP/1.1" 401 0

NSDictionary* params = [[NSDictionary alloc] initWithObjectsAndKeys: _contentTextView.text, @"content", nil];



NSString *path = [NSString stringWithFormat:@"/api/rest/sopsteps/%@/",((PokaSOPStep *)_step).identifier];


[[objectManager HTTPClient]patchPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject)
 {
     _step.content = _contentTextView.text;
     NSLog(@"%@", operation.responseString);
 }
                            failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {
     if(operation.responseData)
     {
         id json = [NSJSONSerialization JSONObjectWithData:operation.responseData options:0 error:nil];
         if(!json)
         {
             NSLog(@"An unexpected error occurred. No JSON from Server");
         }
         else
         {
             NSLog(@"An unexpected error occurred.");
         }
     }
     else
     {
         NSLog(@"The Server is currently not responding.");
     }

 }];

но если я делаю это из браузера, я получаю:

[26/дек/2012 16:54:57] "ИСПРАВЛЕНИЕ /api/rest/sopsteps/17/HTTP/1.1" 202 0

Любые идеи?! Спасибо!


person abisson    schedule 26.12.2012    source источник
comment
Есть ли здесь какой-либо тип авторизации, который вы используете на конце django?   -  person shawnwall    schedule 28.12.2012


Ответы (1)


401 — это HTTP-код для «неавторизованного доступа». Причина, по которой вы получаете разные результаты в браузере и AFNetworking, заключается в том, что вы вошли в первый, но не во второй (вы можете проверить это, попробовав это в другом браузере).

Я не знаю, какую схему аутентификации вы настроили для своего сервера, но вам нужно будет войти в нее на iOS, прежде чем вы сможете сделать этот запрос.

person mattt    schedule 28.12.2012