使用RestKit以XML格式发送发布请求

时间:2012-01-16 15:49:15

标签: objective-c ios restkit

您好我是第一次使用restkit,我想到了几个问题。首先使用restkit发送post请求时请求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]; 

这是我正在使用的代码,Web服务接受的xml应该看起来像

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

它正在发送请求,但我没有得到正确的回复。有没有办法查看我发送给服务器的请求的格式是什么?

5 个答案:

答案 0 :(得分:2)

听起来你正在使用错误的电话。您正在使用的帖子假设其他服务需要params,例如login = username&amp; password = skdjgh,即不是XML格式,而是“正常REST格式”。您需要找到使用RestKit发布文本块的调用,或使用其他调用。换句话说,您需要自己创建XML(或使用某些库),然后通过帖子发送。

答案 1 :(得分:2)

试一试。我认为它应该做你想要的。我从来没有工作,但我的代码还有其他问题。

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

    objectManager.serializationMIMEType = RKMIMETypeXML;

注意:这可能是您向您发送XML而不是将XML发送到服务器的操作。不知道我的头脑。

答案 2 :(得分:2)

您可以使用RKRequestSerialization类为您执行xml序列化。

以下是我的某个项目的代码段:

#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>

答案 3 :(得分:1)

我做了objectManager.serializationMIMEType = RKMIMETypeXML;但我的请求的Content-Length是0,HTTP Body是空的。如果我使用RKMIMETypeJSON请求看起来很好,但xml序列化不起作用。任何想法为什么会这样?使用有效的序列化来发布xml还需要做些什么呢?

我也在doc中找到了这个:“RestKit目前支持序列化为RKMIMETypeFormURLEncoded和RKMIMETypeJSON”。那么,我如何使用RKObjectManager发布xml?

答案 4 :(得分:0)

我使用ASIHTTPRequest和XMLWriter解决了这个问题。不幸的是,但RestKit似乎并不支持XML文章。

我确实使用RK来获取内容。