Использование target-c для создания сообщения HTTP POST и обработки возвращенных данных XML - PullRequest
2 голосов
/ 01 февраля 2012

Введение в ситуацию

Для приложения, которое я сейчас разрабатываю, мне нужно кодировать API-интерфейс веб-сайта для обработки загрузки новых видео, а также проверки логина пользователяи так далее.В документации по API приведены примеры того, как его использовать, все это на PHP, и я не уверен, как лучше всего справиться с этим в target-c, как в том, что касается программирования протоколов, мой опыт работы сЯзык obj-c терпит неудачу.

Более глубокое объяснение

Я не буду публиковать какие-либо подробности об API, поскольку это должно храниться в секрете, поэтому я надеюсь, что мое объяснение будетдостаточно, чтобы сгенерировать простой пример / ответ какого-либо рода.

Итак, основная идея заключается в том, что вы отправляете HTTP-запрос POST на URL-адрес API.Результатом вызова этого URL будет информация XML о сайте и текущем пользователе, вошедшем в систему.

При отправке запроса POST в API у меня есть несколько вариантов определенных переменных, которые я хочу отправить вместе с запросом, в зависимости ото том, какую информацию я хочу вернуть (это могут быть такие вещи, как пароль пользователя, идентификатор пользователя и т. д.).

Переменные, которые вы отправляете в API, представляют собой массив отсортированных по алфавиту пар ключ-значение (где переменная для отправки в API является ключом, а значение - это то, что вы хотите получить из этого ключа).

Вопрос

Мой вопрос просто заключается в том, каквы собираетесь выполнить запрос HTTP POST для определенного URL и обрабатывать возвращенные данные XML?Есть ли вообще какая-либо встроенная функциональность для этого в obj-c?

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

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

У меня просто вопрос: как выполнить запрос HTTP POST для определенного URL-адреса

Для этого вы используете NSMutableURLRequest. Вы можете установить метод HTTP, поля заголовка и т. Д.

и обрабатывать возвращенные данные XML?

NSHTTPURLResponse предоставит данные ответа, будь то XML, JSON, HTML и т. Д.

Другой вариант - ASIHTTPRequest , который довольно популярен благодаря простоте использования.

Что бы вы ни решили использовать, начните с чтения Руководства по программированию системы загрузки URL , чтобы вы имели полное представление о функциях загрузки URL, встроенных в платформу Foundation.

0 голосов
/ 01 февраля 2012

Я бы не рекомендовал использовать ASIHTTPRequest.Я работал над проектами, которые содержали эти классы в прошлом, и лично я нашел это и медленным и грязным (то есть уродливый код).Возможно, в настоящее время это улучшилось, но, похоже, есть более чистая альтернатива.

Проверьте AFNetworking: https://github.com/AFNetworking/AFNetworking

Краткое введение здесь: http://engineering.gowalla.com/2011/10/24/afnetworking/

Этот методможет быть интересным для вас, делает работу с XML-ответами очень удобной: http://engineering.gowalla.com/AFNetworking/Classes/AFXMLRequestOperation.html

0 голосов
/ 01 февраля 2012

Для публикации данных большинство людей используют ASIHTTPRequest:

https://github.com/aidansteele/asi-http-request-1

Вот пример кода для POST:

NSString * urlString = [NSString stringWithFormat:@"http://%@%@",[self getServer],url];        
ASIFormDataRequest * request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setPostValue:json forKey:@"json"];
[request setResponseEncoding:NSUTF8StringEncoding];
[request setDelegate:self];
[request startAsynchronous];

Возвращение данных.

Я настоятельно рекомендую использовать JSON с TouchJSON для iOS: https://github.com/TouchCode/TouchJSON

Получив ответ от ASI, вы можете просто запустить [replyString JSONValue]чтобы получить представление массива / словаря для JSON, который вы закодировали на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...