2010-03-07 1 views
3

У меня есть этот код здесь:iPhone POST в PHP неудачи

NSString *post = [NSString stringWithFormat:@"deviceIdentifier=%@&deviceToken=%@",deviceIdentifier,deviceToken]; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"http://website.com/RegisterScript.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"MyApp-V1.0" forHTTPHeaderField:@"User-Agent"]; 
[request setHTTPBody:postData]; 
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *response = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding]; 

, которые должны посылать данные на мой PHP сервер для регистрации устройства в нашу базу данных, но для некоторых из моих пользователей нет данных POST не посылаются , Мне сказали, что эту линию:

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

может быть причиной проблемы. Любые мысли о том, почему этот скрипт иногда не отправляет данные POST? На сервере я получил трассировку пакетов для неудачной отправки, а длина содержимого - 0, поэтому никаких данных не было отправлено.

+0

Смотрите http://stackoverflow.com/questions/1231104/iphone-post-data-to-php-page –

ответ

2

Я выполняю аналогичную функцию в своем, и единственное, что отличается, - это линия, которую вы считаете неправильной. Попробуйте делать

NSMutableData *postData = [NSMutableData data]; 
[postData appendData:[[NSString stringWithFormat::@"deviceIdentifier=%@&deviceToken=%@",deviceIdentifier,deviceToken]dataUsingEncoding:NSUTF8StringEncoding]]; 

stringByUrlEncoding в основном заменяет любые зарезервированные символы с их характером кодируемого безопасной строки (я думаю, вот лучший способ объяснить это, мой ум пустым атм).

Надежда, что помогает

+0

Где ты используя stringByURLEncoding? Я действительно заменил свой код на ваш, хотя, похоже, его работа! : D – Alexander

+0

Я использую его для переменных, извините, я думал, что я его вложил. Таким образом, ваш будет [deviceIdentifier stringByUrlEncoding], [deviceToken stringByUrlEncoding]. http://www.drobnik.com/touch/2009/08/url-encoding/ объясняет, почему его использовать и код – Rudiger

0

Проверьте свои данные: NSLog ([[NSString Alloc] initWithData: PostData кодирование: NSAsciiStringEncoding]);

0

Кстати, вы можете получить версию приложения из свойств:

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; [request setValue:[NSString stringWithFormat:@"My App %@", appVersion] forHTTPHeaderField:@"User-Agent"];