使用 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发送具有数据和图像的多格式请求

如何使用 Restkit 发送表单数据类型请求

使用 RestKit 发送 POST 不会返回 JSON 内容

Restkit:multipartFormRequestWithObject 不是 json

RestKit POST 发送 JSON 不包含映射路径/类名

使用 RestKit 处理原始数据的响应