dataWithContentsOfURL - 服务器的期望是什么?

时间:2011-12-21 09:44:24

标签: objective-c ios cocoa-touch

我正在尝试使用URL的内容创建NSData:

NSString *theUrl = [NSString stringWithString:@"http://127.0.0.1:8090"]; 
NSError *connectionError = nil; 
NSData *inData = [NSData dataWithContentsOfURL:[NSURL URLWithString:theUrl] options:NSDataReadingUncached error:&connectionError];
NSInteger code = [connectionError code];
if (code != 0)
{
    NSString *locDesc = [NSString stringWithString:[connectionError localizedDescription]];
    NSString *locFail = [NSString stringWithString:[connectionError localizedFailureReason]];
    NSLog(@"Error: %d %@ %@", code, locDesc, locFail);
}
else if ([inData length] == 0)
{
    NSLog(@"No data");
}

我有一个在本地主机上运行的超简单Java http服务器,它将Hello World返回给客户端:

DataOutputStream os = new DataOutputStream(s.getOutputStream()); // s is the socket
os.writeBytes(new String("Hello World\0"));
os.flush();
os.close();
s.close();

将Google Chrome指向http://127.0.0.1:8090时,它会按预期显示Hello World,因此数据 会被发回。当我运行objective-c代码时,inData为空(0x0,数据长度为0),错误代码为0,因此我没有检查错误。如果我将theUrl更改为“http://www.google.com”,则数据长度变为> 0

所以我的问题是当我去本地的http-server时为什么inData是空的。是否必须使用特定数据序列终止流?

2 个答案:

答案 0 :(得分:1)

服务器输出的HTTP状态代码是否应该如此?如果响应不包含200状态,表明请求已成功完成,则可能导致dataWithContentsOfURL:options:error:失败。

答案 1 :(得分:0)

更多的上下文会很有用,但一个疯狂的猜测是你的“超级简单”HTTP服务器不会发送任何标题,也不会发送NSURL预期的标题。

您是否尝试curl -i http://127.0.0.1:8090查看输出实际上是什么样的?