如何将请求发送到url并将数据转换为字符串

时间:2011-05-19 13:58:15

标签: iphone ipad

我有一个包含流数据的网址。

我需要将数据加载到NSString中。

@all

帮助我。

4 个答案:

答案 0 :(得分:3)

有几种方法可以解决这个问题,每种方法都取决于您的情况。第一种方法是使用NSString的+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error方法。因此,如果您想获取某些URL的内容,可以使用以下代码

NSURL* url = [NSURL urlWithString:@"http://www.someUrl.com/some/path"];
NSString* urlContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8Encoding error:nil];

这种方法的问题在于它会阻止你调用的任何线程。因此,您可以在线程中调用它,也可以使用其他方法之一。

第二种方法是使用NSURLConnection。这使用委托以事件驱动的方式处理进程。这种方法有一个很好的总结here

第三种方法是使用某种类型的包装器类来处理更高级别的http请求。我个人喜欢ASIHTTPRequest。它可以使用委托处理同步,异步和使用块的异步处理请求。以下示例来自ASIHTTPRequest website。此示例显示了如何执行异步HTTP请求。

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];

   // Use when fetching binary data
   NSData *responseData = [request responseData];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}

此示例向您展示如何使用块作为回调intsead委托方法来执行异步请求。请注意,这只能在iOS 4.0及更高版本中使用,因为它使用块。但ASIHTTPRequest一般可以在没有块的情况下在iOS 3.0及更高版本上使用。

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setCompletionBlock:^{
      // Use when fetching text data
      NSString *responseString = [request responseString];

      // Use when fetching binary data
      NSData *responseData = [request responseData];
   }];
   [request setFailedBlock:^{
      NSError *error = [request error];
   }];
   [request startAsynchronous];
}

答案 1 :(得分:1)

NSData *data = [NSData dataWithContentsOfURL:myURL];
NSString *myString = [[NSString alloc] initWithData:data
                                           encoding:NSUTF8StringEncoding];

你必须知道编码才能做到这一点。

答案 2 :(得分:0)

基兰,

尝试此处提供的解决方案:

Get content of webservice

答案 3 :(得分:-2)

那么,你将不得不解决如何将每个字节编码成等效的字符串兼容表示。在.Net中,我们使用Base64编码。我确信在iWorld中有相当的东西。