Отправить запрос в формате XML с помощью RestKit - PullRequest
1 голос
/ 16 января 2012

Привет, я впервые использую restkit, и у меня возникает несколько вопросов. Во-первых, при отправке почтового запроса с помощью restkit, в каком формате это запрос Json или XML и как его указать? Я отправляю почтовый запрос на сервер для аутентификации пользователя и должен получить подтверждение, если данные верны в формате XML.

NSArray *objects = [NSArray arrayWithObjects: email, password, nil];
NSArray *keys = [NSArray arrayWithObjects:@"username", @"password", nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

[[RKClient sharedClient] post:@"/login" params:params delegate:self]; 

Это код, который я использую, xml, принятый веб-сервисами, должен выглядеть как

<login>
  <username>user@example.com</username>
  <password>Password</password>
</login>

Это отправка запроса, но я не получаю правильный ответ. Есть ли способ просмотреть формат запроса, который я отправляю на сервер?

Ответы [ 5 ]

2 голосов
/ 12 августа 2012

Вы можете использовать класс RKRequestSerialization, чтобы выполнить сериализацию для вас.

Вот фрагмент кода из одного из моих проектов:

#import <RestKit/RKRequestSerialization.h>

...

[RKObjectManager sharedManager].acceptMIMEType = RKMIMETypeTextXML;

NSString *loginData = @"<Login><UserId>test</UserId><Password>test</Password></Login>";

[[RKClient sharedClient] setValue:@"XYZ01" forHTTPHeaderField:@"ServiceId"]; 
[[RKClient sharedClient] post:@"/login" 
                       params:[RKRequestSerialization serializationWithData:[loginDetails dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeTextXML] 
                     delegate:self];

И, вот дамп, используя RKLogConfigureByName("RestKit/Network", RKLogLevelTrace)

2012-08-12 11:28:41.476 MyApp[730:707] T restkit.network:RKRequest.m:402 Prepared POST URLRequest '<NSMutableURLRequest https://someserver.com/MyApp/rest/service/request>'. HTTP Headers: {
    Accept = "text/xml";
    "Content-Length" = 75;
    "Content-Type" = "text/xml";
    ServiceId = XYZ01;
}. HTTP Body: <Login><UserId>test</UserId><Password>test</Password></Login>
2 голосов
/ 17 января 2012

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

    RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://mysite.com"];

    objectManager.serializationMIMEType = RKMIMETypeXML;

Примечание : это может быть то, что вы делаете для отправки вам XML, а не для отправки XMLсервер.Не знаю, с моей головы.

2 голосов
/ 16 января 2012

Похоже, вы используете неправильный вызов.Почтовый вызов, который вы используете, предполагает, что остальная служба хочет получить такие параметры, как login = username & password = skdjgh, т.е. НЕ в XML, а в «обычном формате REST».Вам нужно либо найти вызов, чтобы опубликовать блок текста с помощью RestKit, либо использовать другой вызов.Другими словами, вам нужно создать XML самостоятельно (или использовать некоторую библиотеку), а затем отправить его по почте.

1 голос
/ 13 июня 2012

Я сделал objectManager.serializationMIMEType = RKMIMETypeXML;, но Content-Length моего запроса равен 0, а тело HTTP пусто.Если я использую RKMIMETypeJSON, запрос выглядит нормально, но сериализация xml не работает.Есть идеи, почему это происходит?Что еще мне нужно сделать, чтобы опубликовать xml с допустимой сериализацией?

Я также нашел это в doc: "RestKit в настоящее время поддерживает сериализацию в RKMIMETypeFormURLEncoded и RKMIMETypeJSON" .Итак, как я могу использовать RKObjectManager для публикации XML?

0 голосов
/ 09 июля 2012

Я решил это, используя ASIHTTPRequest и XMLWriter.К сожалению, но RestKit, кажется, просто не поддерживает сообщения XML из коробки.

Я все же использую RK для GETting вещей.

...