使用 RestKit 以 XML 格式发送 post 请求
Posted
技术标签:
【中文标题】使用 RestKit 以 XML 格式发送 post 请求【英文标题】:Send post request in XML format using RestKit 【发布时间】:2012-01-16 15:49:14 【问题描述】:您好,我是第一次使用 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>
它正在发送请求,但我没有得到正确的响应。有没有办法查看我发送到服务器的请求的格式是什么?
【问题讨论】:
【参考方案1】:听起来你打错电话了。您正在使用的 post 调用假定其余服务需要像 login=username&password=skdjgh 这样的参数,即不是 XML,而是“正常 REST 格式”。您需要找到一个调用来使用 RestKit 发布一段文本,或者使用另一个调用。换句话说,您需要自己创建 XML(或使用某些库),然后通过帖子发送。
【讨论】:
你能建议我一个方法吗?【参考方案2】:试试这个。我认为它应该做你想做的事。我从来没有让它工作,但我的代码有其他问题。
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://mysite.com"];
objectManager.serializationMIMEType = RKMIMETypeXML;
注意:这可能是您将 XML 发送回您所做的,而不是将 XML 发送到服务器。完全不知道。
【讨论】:
【参考方案3】:你可以使用RKRequestSerialization
类为你做xml序列化。
这是我的一个项目的代码 sn-p:
#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>
【讨论】:
嘿 Imran,如何查看是否存储了响应天气? 要查看响应,您必须实现 RKRequestDelegate 的 'didLoadResponse' 方法。【参考方案4】:我做了objectManager.serializationMIMEType = RKMIMETypeXML;
,但我的请求的 Content-Length 为 0,HTTP 正文为空。如果我使用RKMIMETypeJSON
,请求看起来不错,但 xml 序列化不起作用。任何想法为什么会发生这种情况?我还需要做什么才能发布具有有效序列化的 xml?
我还在文档中找到了这个:“RestKit 目前支持序列化为 RKMIMETypeFormURLEncoded 和 RKMIMETypeJSON”。那么,如何使用 RKObjectManager 发布 xml?
【讨论】:
【参考方案5】:我使用 ASIHTTPRequest 和 XMLWriter 解决了这个问题。不幸的是,RestKit 似乎不支持开箱即用的 XML 帖子。
我确实使用 RK 来获取东西。
【讨论】:
以上是关于使用 RestKit 以 XML 格式发送 post 请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 RestKit 发送 POST 不会返回 JSON 内容
Restkit:multipartFormRequestWithObject 不是 json