Веб-сервис iPhone NSData и PHP - PullRequest
1 голос
/ 16 мая 2011

Я довольно новичок в разработке для iOS и хочу отправить сообщение с запросом в веб-сервис, созданный на PHP. Он примет запрос XML, обработает и затем предоставит ответное сообщение XML.

Однако проблема, с которой я сталкиваюсь, заключается в том, что при отправке данных в веб-службу они находятся в форме 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 в читаемый XML на стороне сервера PHP?

Заранее спасибо.

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"];

1 Ответ

4 голосов
/ 16 мая 2011

Отправьте XML на HTTP Body и проанализируйте его на стороне PHP, и вам нужно установить Content-Type На application/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 через POST с NSURLConnection

...