2012-03-01 140 views
1

我正在尋找如何對REST Web服務(特別是CakePHP服務)執行POST請求,並且我似乎發現所有人都說要使用ASIHTTPRequest庫,但我看到這在一年左右沒有更新,所以我寧願使用更新的方法,最好直接從iOS中進行更新。iOS - 向CakePHP REST發出POST請求

我讀過你可以使用NSURLConnection進行調用,但我真的不明白它,如果有人能指出我正確的方向,我想更全面地解釋它。

此外,我已經使用NSString的stringWithContentOfURL方法成功地從我的服務器檢索了使用我的REST API的數據,但據我所知,我無法使用它進行POST調用。

回答

5

我通常這樣做。

NSURL *url = [NSURL URLWithString:@"http://someurl.com"]; 
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
[req setHTTPMethod:@"POST"]; 
[req setHTTPBody:self.yourData]; 
NSHTTPURLResponse __autoreleasing *response; 
NSError __autoreleasing *error; 
[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; 
if (error == nil && response.statusCode == 200) { 
    // Process response 
} else { 
    // Process error 
} 

[NSURLConnection sendSynchronousRequest:]方法也返回NSData對象,你也可以操縱。

+0

是yourData形成究竟是如何,我想說的是我最大的疑問。謝謝。 – 8vius 2012-03-01 14:59:00

+1

是的,這有點棘手。最簡單的方法是形成看起來像你的平均請求字符串的'NSString':'param1 = value&param2 = value&param3 = value' - 然後做'[yourString dataUsingEncoding:NSUTF8StringEncoding];'。第二種方法是使用參數值對創建'NSDictionary',將其序列化爲JSON數據對象(通過'NSJSONSerialization'或'JSONKit',我更喜歡後者)並將其發送到HTTP主體中,但要在服務器上進入必須讀取原始POST數據,而不是$ _POST。 – 2012-03-01 15:04:33

+0

非常有幫助的Kyr,你有沒有使用過蛋糕,看看他們是如何爲表單POST構建數據的? – 8vius 2012-03-01 15:08:44

1

我正在處理相同的問題(與CakePHP REST POST後端的iOS前端)。此線程非常有幫助。試着用捲曲如下:

curl -d "data[Model][field0]=field0value&data[Model][field1]=field1value" https://pathtoyourapi.com/plugin/controller/function.html 

或者

curl -d "data[Model][field0]=field0value&data[Model][field1]=field1value" https://pathtoyourapi.com/plugin/controller/function 
+0

很高興幫助你,你應該upvote我的問題* wink wink *:P,但這將是在PHP我假設,捲曲調用。 Kyr的答案解決了我所有的問題,現在打電話給我的API沒有任何問題:) – 8vius 2012-03-27 20:02:28

+0

@ 8vius,當我有更多的聲望時。我看到了你和Kyr的聊天記錄,但我們終於可以通過將你的數據發佈到你的cakephp資源中得到迴應了嗎?正如我所指出的那樣,通過使用Kyr或AFNetworking(從ASIHTTPRequest切換)制定的方法,我可以得到正確的數據響應但沒有運氣。 – Airuop 2012-03-28 19:42:15

+0

用你的通話代碼發一個問題,你得到了什麼答覆,所以我可以給你一個手 – 8vius 2012-03-28 21:12:06