2012-01-16 58 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