我正在尝试使用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是空的。是否必须使用特定数据序列终止流?
答案 0 :(得分:1)
服务器输出的HTTP状态代码是否应该如此?如果响应不包含200状态,表明请求已成功完成,则可能导致dataWithContentsOfURL:options:error:
失败。
答案 1 :(得分:0)
更多的上下文会很有用,但一个疯狂的猜测是你的“超级简单”HTTP服务器不会发送任何标题,也不会发送NSURL预期的标题。
您是否尝试curl -i http://127.0.0.1:8090
查看输出实际上是什么样的?