2011-05-15 97 views
1

我是相當新的iOS開發,並希望發送一個請求消息到我在PHP中創建的Web服務。它將接受XML請求,處理並提供響應XML消息。iPhone Web服務NSData和PHP

但是,我遇到的問題是,當發送數據到Web服務它是在NSData形式。

數據的NSLog的發送是:

<3c3f786d 6c207665 7273696f etc etc ... 743e> 

然而,PHP腳本需要像這樣的XML消息:

<?xml version="1.0" ?><request-message><tag-1></tag-1><tag-2></tag-2></request-message> 

所以我的問題是,是否有發送的方式XML而不轉換爲數據,或者有沒有辦法將NSData字符串轉換爲PHP服務器端的可讀XML?

在此先感謝。

Pazzy

編輯:包括請求代碼:

// Construct the webservice URL 
NSURL *url = [NSURL URLWithString:@"http://localhost/web/check_data.php"]; 

NSString *requestXML = @"<?xml version='1.0'?><request-message><tag-1>VALUE1</tag-1><tag-2>VALUE2</tag-2></request-message>"; 

NSData *data = [requestXML dataUsingEncoding:NSUTF8StringEncoding]; 

// Create a request object with that URL 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30]; 

[request setHTTPBody:data]; 
[request setHTTPMethod:@"POST"]; 
+0

你能分享你如何創建在iPhone端請求的代碼? – 2011-05-15 20:37:32

+0

將代碼添加到編輯部分 – Pazzy 2011-05-15 20:48:43

+0

然後執行以下操作以創建連接... connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; – Pazzy 2011-05-15 21:47:33

回答

4

發送的HTTP Body的XML和PHP端解析它,你需要設置Content-Typeapplication/xml; charset=utf-8

NSString* sXMLToPost = @"<?xml version=\"1.0\" ?><request-message><tag-1></tag-1><tag-2></tag-2></request-message>"; 

NSData* data = [sXMLToPost dataUsingEncoding:NSUTF8StringEncoding]; 

NSURL *url = [NSURL URLWithString:@"http://myurl.com/RequestHandler.ashx"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:[sXMLToPost dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLResponse *response; 
NSError *error; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

if (error) {..handle the error} 

並在服務器上嘗試以下PHP代碼:

$handle = fopen("php://input", "rb"); 
$http_raw_post_data = ''; 
while (!feof($handle)) { 
    $http_raw_post_data .= fread($handle, 8192); 
} 
fclose($handle); 

看一看這個iPhone sending POST with NSURLConnection

+0

謝謝...你的代碼與我的看法不一樣。我已經添加了[request setValue:@「application/xml; charset = ...」];不知道它的Obj-C代碼... – Pazzy 2011-05-15 21:10:29

+0

是否成功地在服務器上獲取您的請求? – 2011-05-15 21:13:00

+0

不是很確定......我已經設置了腳本以輸出發送給它的內容,並允許connectDidFinish在控制檯上打印返回的內容。什麼都沒有被返回。從PHP端,我有兩行輸出:$ rawPostXML = file_get_contents(「php:// input」); echo $ rawPostXML; – Pazzy 2011-05-15 21:23:55