xcode NSURLConnection后返回200但NSData总是空?

NSString *post = @"maxor=123&minor=123"; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSMutableURLRequest *request = [ NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://xavier-beacon.appspot.com/result4.jsp"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0] ; [request setHTTPMethod:@"POST"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11" forHTTPHeaderField:@"User-Agent"]; [request setValue:[NSString stringWithFormat:@"%d",[postData length]] forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData]; NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [connect start]; 

================================================== =================================================

 - (void)connection: (NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)aResponse { NSLog(@"state------%d", status); } -(void) connection:(NSURLConnection *)connection didReceiveData: (NSData *) incomingData { NSLog(@"data---%@",[[NSString alloc] initWithData: incomingData encoding:NSUTF8StringEncoding]); } 

以下日志总是:(状态——- 200)(data — null)

使用http://xavier-beacon.appspot.com/result4.jsp?maxor=123&minor=123获取chrome / IE / Firefox上的响应数据非常简单

但在iphone中使用Xcode总是返回状态= 200和数据=空QAQ …

谁能告诉我如何解决这个问题… Plz T_T

状态码200显示您现在已经与服务器成功连接。 但这并不意味着您将成功获取数据。 有几点需要注意:

  1. 您的请求应该与服务器上所需的Content-Type匹配。 如果不匹配,则不会收到数据或无效数据

  2. 确保你有哪些方法称为GETPOST

  3. 一些networking服务也需要特定的user-agent ,所以如果它还需要检查用户代理

  4. 参数值:即使您获得成功代码 – 服务器所需的数据types值会导致您的错误。 最常见的数据types不匹配是boolintfloat 。 检查您是否传递确切的数据types值是非常重要的。 例如1被认为是int ,也是一个bool值。

  5. 编码scheme:您必须使用与每个服务器规范完全相同的编码schemeparsing接收数据。

编辑:

在你的情况下,你只需要改变encoding:NSASCIIStringEncoding

 -(void) connection:(NSURLConnection *)connection didReceiveData: (NSData *) incomingData { NSLog(@"data---%@",[[NSString alloc] initWithData: incomingData encoding:NSASCIIStringEncoding]); } 

用你的代码replace上面的方法。

-connection:didReceiveData:在下载过程中可能会被多次调用。

你应该持有一个NSMutableData的实例,你在-connection:didReceiveResponse启动-connection:didReceiveResponse

然后在连接完成时追加数据并分配string:

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.receivedData = [NSMutableData data]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [[self receivedData] appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"data---%@", [[NSString alloc] initWithData:[self receivedData] encoding:NSURF8StringEncoding]); self.receivedData = nil; } 

我会推荐使用像JWURLConnection这样的东西,但如果你真的想自己实现它,你可以检查源代码。