0

我有以下代码:

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"];并尝试了几种不同的类型,但仍然没有运气

4

2 回答 2

1

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

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

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

于 2012-08-15T21:40:44.247 回答
0

帖子长度应来自 postData

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
于 2012-08-16T02:02:18.707 回答