2012-03-17 1 views
0

У меня проблема с Reddit API. Я пытаюсь следовать Reddit API, как описано здесь:error.USER_REQUIRED, сгенерированный при попытке отправить ссылку Reddit в объекте-c

https://github.com/reddit/reddit/wiki/API

Вход в систему с помощью простого NSMutableURLRequest не проблема:

NSString *user = [[NSString alloc]initWithString:[userFld text]]; 
NSString *passwd = [[NSString alloc]initWithString:[passwordFld text]]; 
NSString *urlString = [NSString stringWithFormat:@"http://www.reddit.com/api/login/username/?user=%@&passwd=%@", 
         [user stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
         [passwd stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSURL *url = [NSURL URLWithString:urlString]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"POST"]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Что дает мне результат, из которого я экстракте пользователь мод-хэш:

4029916%2C2010-04-30T22%3A51%3A52%2C1243925043100000000000000000000000000000 

Далее я пытаюсь отправить, используя:

NSString *redditUrlString = [NSString stringWithFormat: 
    @"http://www.reddit.com/api/submit/?uh=%@&kind=link&url=%@&sr=%@&title=%@&r=%@&api_type=json", 
    [appDelegate globalUhString], 
    @"www.google.com", 
    @"funny", 
    @"Google.com", 
    @"funny"]; 

NSURL *url = [NSURL URLWithString:redditUrlString]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPMethod:@"POST"]; 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Однако, когда я достаю ответ JSON формируют данные, полученные от этой связи я всегда получаю ошибку ниже независимо от того, что я использую в качестве мод-хэш:

[».error .USER_REQUIRED "]

Может кто-нибудь объяснить, что я сделал неправильно/как я могу это исправить?

ответ

1

Похоже, вы не проходите в файле cookie reddit_session вместе с параметром uh. Кажется, что api documentation объясняет причину получения ошибки. По словам this answer, это выглядит, как вы, возможно, потребуется оформить код:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 

в applicationDidBecomeActive обработчиком, так как это может быть отвергая печенье из-за CookieAcceptPolicy быть распределены между всеми приложениями.

+0

Таким образом, я добавил эту строку к указанному выше методу, но как захватить файл cookie из NSMutableURLRequest? Может ли это быть каким-то кодом в методе '(connection *) метода didReceiveData'? –

+0

Предполагается хранить его автоматически. Из документов: класс NSHTTPCookie инкапсулирует куки-файл, предоставляя аксессуар для многих общих атрибутов cookie. Он также предоставляет методы для преобразования заголовков файлов cookie HTTP в экземпляры NSHTTPCookie и преобразования экземпляра NSHTTPCookie в заголовки, подходящие для использования с NSURLRequest. Система загрузки URL-адресов автоматически отправляет любые сохраненные файлы cookie, соответствующие NSURLRequest. если в запросе не указано, как отправлять файлы cookie. Аналогично, файлы cookie, возвращенные в NSURLResponse, принимаются в соответствии с текущей политикой принятия cookie. – Petesh

+0

Это решило проблему. Как только я получил cookie от входа в систему, я смог установить cookie в новом запросе. –

Смежные вопросы