2012-01-16 61 views
1

嗨,我第一次使用restkit,并且出现了几个问题。首先,当使用restkit发送post请求时,请求的Json或XML格式是什么格式,以及如何指定它?我正在向服务器发送发布请求以验证用户身份,如果详细信息的格式正确,应该收到一个确认信息。使用RestKit以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>[email protected]</username> 
    <password>Password</password> 
</login> 

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

回答

2

听起来像你使用错误的电话。您正在使用的邮寄呼叫假定其余服务需要像login = username & password = skdjgh这样的参数,即NOT不是XML,而是'正常REST格式'。您需要找到一个使用RestKit发布文本块的调用,或者使用另一个调用。换句话说,您需要自己创建XML(或使用某个库),然后通过帖子发送该XML。

+0

u能建议我转储一个方法来做到这一点? – greenLizard 2012-01-16 16:29:36

2

试试这个。我认为它应该做你想做的事。我从来没有得到它的工作,但我的代码有其他的错误。

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

    objectManager.serializationMIMEType = RKMIMETypeXML; 

注意:这可能是你发送XML回到你身边,不发送XML服务器做什么。不知道我的头顶。

1

我做过objectManager.serializationMIMEType = RKMIMETypeXML;,但我的请求的Content-Length是0,而HTTP Body是空的。如果我使用RKMIMETypeJSON请求看起来不错,但xml序列化不起作用。任何想法为什么发生这种情况我还需要做什么来发布有效的序列化XML?

我也发现了这个在文档:“RestKit目前支持序列化RKMIMETypeFormURLEncoded和RKMIMETypeJSON”。那么,我该如何使用RKObjectManager来发布xml?

+0

还想知道! – Carl 2012-07-05 17:46:02

+0

我的问题确切地是 – 2014-08-30 20:50:03

0

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

我确实使用RK来获取东西。

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> 
+0

嘿伊姆兰,如何看到反应天气是否存储? – Babul 2013-01-18 14:58:32

+0

看到响应,你必须实现RKRequestDelegate的'didLoadResponse'方法。 – 2013-01-22 06:45:03