3

我在这里有这段代码:

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 数据的任何想法?在服务器上,我得到了发送失败的数据包跟踪,并且 Content-lenght 显示为 0,因此根本没有发送任何数据。

4

3 回答 3

2

我正在做类似的功能,唯一不同的是您认为错误的行。尝试做

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

stringByUrlEncoding 基本上用其字符编码的安全字符串替换任何保留字符(我认为这是解释它的最好方法,我的脑海里一片空白)。

希望有帮助

于 2010-03-08T00:34:56.333 回答
0

顺便说一句,您可以从属性中获取应用版本:

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; [request setValue:[NSString stringWithFormat:@"My App %@", appVersion] forHTTPHeaderField:@"User-Agent"];
于 2010-12-02T11:53:43.987 回答
0

测试你的数据: NSLog([[NSString alloc] initWithData: postData encoding:NSAsciiStringEncoding]);

于 2010-03-08T16:07:18.537 回答