iOS POST有时只能工作

时间:2012-08-15 21:33:41

标签: objective-c

我有以下代码:

NSString *post = @"i hope this gets there";

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [post length]];

NSURL *url = [NSURL URLWithString:@"http://www.oneoftwosites.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

[NSURLConnection connectionWithRequest:request delegate:nil];

//potential response
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

//convert response so that it can be LOG'd
NSString *returnString = [[NSString alloc] initWithData:response encoding:NSASCIIStringEncoding];

NSLog(@"RETURN: %@", returnString);

我已经在2个不同的网站上对其进行了测试:http://www.htmlcodetutorial.com/cgi-bin/mycgi.plhttp://instagraph.me/post,将这些网址替换为http://www.oneoftwosites.com。出于某种原因,它只适用于第一个网站(使用perl编写),而不适用于第二个(使用.php编写)。

有没有人有任何想法为什么会这样?它似乎有时只会工作似乎很愚蠢,但我真的不知道为什么它不能用于第二个网站(我没有看到代码,但我确实看到了一些示例输出)。


编辑:我添加了

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];尝试了几种不同的类型,但仍然没有运气

2 个答案:

答案 0 :(得分:1)

Instagraph期望什么样的POST数据?机会是,它是某种结构化数据,如URL编码形式,XML或JSON。你的字符串既不是那些。因此,请提供Content-Type,并相应地格式化您的POST数据。也许你会好运。

编辑:你的第二个网站是Instagraph。这是一个公共网站。它可能有一个记录的API - POST中应该有哪些字段和值。您发送的POST数据是否符合该规范?到目前为止,我不这么认为。如果您发送虚拟测试数据 - 为什么期望它能够工作?你期待什么明智的效果?

顺便说一句,“我希望它到达那里”这一行不构成application/x-www-form-urlencoded类型的有效数据块。

答案 1 :(得分:0)

帖子长度应来自postData

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];