iPhone向PHP发送POST请求失败

3

I have this code here:

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-length为0,因此根本没有发送任何数据。


请参考以下链接:https://dev59.com/m0jSa4cB1Zd3GeqPH7_e - Todd Moses
3个回答

2

我在我的项目中正在做类似的功能,唯一不同的是你认为有问题的那行代码。尝试

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

stringByUrlEncoding基本上是将任何保留字符替换为它们的字符编码安全字符串(我认为这是最好的解释方式,我的头脑现在一片空白)。

希望这能帮到您。


你在哪里使用stringByURLEncoding?我已经用你的代码替换了我的,看起来它正在工作!:D - Alexander
我在变量上使用它,抱歉我以为我已经放进去了。所以你的代码应该是[deviceIdentifier stringByUrlEncoding],[deviceToken stringByUrlEncoding]。http://www.drobnik.com/touch/2009/08/url-encoding/ 解释了为什么要使用它以及相应的代码。 - Rudiger

0

顺便提一下,你可以从属性中获取应用程序版本:

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接