2013-07-30 2 views
0

Я пытаюсь ПОЧТИ пользователя на сервер с поддержкой рельсов, но я получаю странную ошибку. Когда я нажимаю кнопку «Отправить», я получаю ошибку 404 в журнале и считывание, в котором говорится, что страница не существует. Как так:Нечетное AFNetworking Fail URL Request

Error: Error Domain=AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299), got 404" UserInfo=0xc03c140 {NSLocalizedRecoverySuggestion=<!DOCTYPE html> 
<html> 
<head> 
    <title>The page you were looking for doesn't exist (404)</title> 
    <style type="text/css"> 
    body { background-color: #fff; co... 

ниже в журнал печатает ошибочный URL

AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0xc033300> { URL: http://example.herokuapp.com/users }, 

Так журнал clims, что эта страница не существует, но если скопировать и вставить url- страница делает действительно существует, и я уже смог опубликовать его в веб-обзоре. По какой-то причине afnetworking или nsmutbleURLrequest заявляет, что страница не существует, когда она делает ... Я имею в виду, что я не хочу сказать, что компьютер ошибается, но что здесь происходит? Я очистил xcode и ушел, и ничего подобного не зафиксировал. У кого-нибудь это случилось?

Это код, я использую, чтобы сделать запрос:

+ (void)createUserWithUsername:(NSString *)signature 
         email:(NSString *)email 
         password:(NSString *)password 
         block:(void (^)(User *user))block 
{ 
    NSDictionary *parameters = @{@"signature": signature, 
           @"email": email, 
           @"password": password 
           }; 

    [[APIClient sharedClient] postPath:@"/users" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     User *user = [[User alloc] initWithDictionary:responseObject]; 

     if (block) { 
      block(user); 
     } 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
     if (block) { 
      block(nil); 
     } 
    }]; 
} 

И это то, что JSON выглядит из успешных постов, которые я сделал с веб стороны

{"created_at":"2013-07-18T04:05:36Z","email":"[email protected]","id":1,"signature":grant,"updated_at":"2013-07-18T04:05:36Z"} 

Поэтому, после использования Charles для сравнения успешных с неудачными почтовыми запросами, я вижу, что неудачные сообщения получают ошибку 406. Вероятно, эта ошибка правильна, поскольку как успешные, так и неудачные сообщения имеют один и тот же путь. Поэтому я не думаю, что это было так, как раньше. Но 406? В журнале для неисправного запроса нет ссылок на проблему с тем, что его содержание типа является JSON .. Это журнал консоли

headers { 
    "Cache-Control" = "no-cache"; 
    "Content-Type" = "application/json; charset=utf-8"; 
    Date = "Wed, 31 Jul 2013 17:24:53 GMT"; 
    "Proxy-Connection" = "Keep-alive"; 
    Server = "thin 1.5.1 codename Straight Razor"; 
    "Set-Cookie" = "_gold_session=BAh7Basdfasdk; path=/; HttpOnly"; 
    "Transfer-Encoding" = Identity; 
    "X-Rack-Cache" = "invalidate, pass"; 
    "X-Request-Id" = c9c17573dde8b4767ba519aed6e04959; 
    "X-Runtime" = "0.008262"; 
    "X-Ua-Compatible" = "IE=Edge,chrome=1"; 
} }} 
2013-07-31 10:24:57.828 Gold[57543:a0b] User: (null) 

Вот сравнение серверных журналов с Чарльзом, показывая неудачный почтовый запрос и успешный.

Это запрос от неисправного сообщению от Iphone

POST /users HTTP/1.1 
Host mysterious-5550.herokuapp.com 
Content-Type application/json; charset=utf-8 
Accept-Encoding gzip, deflate 
Content-Length 40 
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 
Accept application/json 
Connection keep-alive 
User-Agent Gold/1.0 (iPhone Simulator; iOS 7.0; Scale/2.00) 

Это неисправный ответ:

HTTP/1.1 406 Not Acceptable 
Cache-Control no-cache 
Content-Type application/json; charset=utf-8 
Date Wed, 31 Jul 2013 18:26:12 GMT 
Server thin 1.5.1 codename Straight Razor 
Set-Cookie _gold_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFVEkiJTU2OGY2MWZhMzdmNzY2OGRjZGU0ZmQ1Y2Q5YmZiNzAxBjsAVA%3D%3D--3ab7521533c9e8f0f5b4a4d5da4d9f294bdeaba5; path=/; HttpOnly 
X-Rack-Cache invalidate, pass 
X-Request-Id 900d86dd0719d0a00eacf803e90fa780 
X-Runtime 0.007971 
X-Ua-Compatible IE=Edge,chrome=1 
transfer-encoding chunked 
Connection keep-alive 

Это требование успешного пост от сети

POST /users HTTP/1.1 
Host mysterious-5550.herokuapp.com 
Content-Length 217 
Cache-Control max-age=0 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Origin http://mysterious-5550.herokuapp.com 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1580.0 Safari/537.36 
Content-Type application/x-www-form-urlencoded 
Referer http://mysterious-5550.herokuapp.com/users/sign_up 
Accept-Encoding gzip,deflate,sdch 
Accept-Language en-US,en;q=0.8 
Cookie _gold_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTQ5MGY5MzMzMmNlMzkxZDI4NTllNDU0ZGQ0ZTE5MDg2BjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMStZRTNwbGRKQ1VJWXY4aXZtbUMybGt3ejFLcnBZSU5zY053WEcwa2kydDg9BjsARg%3D%3D--2dd8e808965ccc2da457abc94c58c39d080f62ab 

Это ответ удачного поста из Интернета

HTTP/1.1 302 Moved Temporarily 
Cache-Control no-cache 
Content-Type text/html; charset=utf-8 
Date Wed, 31 Jul 2013 18:30:11 GMT 
Location http://mysterious-5550.herokuapp.com/ 
Server thin 1.5.1 codename Straight Razor 
Set-Cookie _gold_session=BAh7CUkiD3NlFlvdSBoY88c959; path=/; HttpOnly 
X-Rack-Cache invalidate, pass 
X-Request-Id c94b3d921dfe451c562c171524b78b3f 
X-Runtime 0.750712 
X-Ua-Compatible IE=Edge,chrome=1 
transfer-encoding chunked 
Connection keep-alive 

Хотя типы контента различны (текст/html v json) Я не думаю, что это проблема. Оба типа должны быть приняты - и обычно xcode скажет неожиданный тип содержимого. Можете ли вы увидеть что-нибудь еще, что несовместимо, что может вызвать ошибку 406?

+1

Пожалуйста, введите код, который вы используете, чтобы сделать запрос. Также, пожалуйста, опубликуйте вывод 'po yourMutableURLRequest' в строке перед созданием объекта AFHTTPRequestOperation. –

+0

Не может быть, потому что это POST в приложении и GET в браузере? –

+0

@ KhanhNguyen он сказал: «Я уже смог опубликовать его с веб-представления» –

ответ

-2

Сервер приложений может требовать более подробную информацию, как печенье и возвращение 404.

0

Этот код выглядит нормально.

Сначала перейдите в метод postPath:parameters:success:failure: и установите точку останова перед последней строкой. Введите po request в консоли и убедитесь, что URL-адрес соответствует ожидаемому.

Если URL-адрес не такой, как вы ожидаете, проверьте свой звонок initWithBaseURL и убедитесь, что вы хотите, чтобы эта косая черта перед «пользователями».

Если URL-адрес является тем, что вы ожидаете, вам нужно отладить его с администратором вашего сервера, потому что серверу, вероятно, потребуется какая-то другая информация, например, аутентификация или заголовки Accept. Обратите внимание, что 404 не является правильным кодом состояния для возврата в этом случае, поэтому вы можете открыть дискуссию о том, когда вы используете коды состояния.

https://github.com/AFNetworking/AFHTTPRequestOperationLogger поможет вам с этим - он может регистрировать ваши запросы и то, что они возвращают на консоль.

+0

После наблюдения за неудачной записью на Чарльза я вижу, что у меня ошибка 406. Я добавил некоторые из журналов выше – grantvansant

+0

406, что, вероятно, вам нужно установить один из заголовков 'Accept' по-разному (как я уже упоминал выше). См. Список здесь: http://stackoverflow.com/a/8410669/1445366 –

+0

I опубликовано сравнение заголовков запросов и ответов. Вы видите что-нибудь, что может вызвать 406? – grantvansant