【问题标题】:How to test the availability of URL or NOT?如何测试 URL 的可用性与否?
【发布时间】:2015-04-30 05:39:12
【问题描述】:

我在 SO 上找不到这个问题的简单解决方案。 我需要对我的 URL 进行简单的检查逻辑并返回 YES - 如果可用或 NO - 如果不可用。

我发现了什么:

-(BOOL)connectedToNetwork  {
    NSURL* url = [[NSURL alloc] initWithString:@"http://google.com/"];
    NSData* data = [NSData dataWithContentsOfURL:url];
    if (data != nil)
        return YES;
    return NO;
}

创立this 但我需要更正确的答案。

UPD

我在 Apple 找到了SimplePing

UPD1

SO 找到答案,谢谢!

UPD2

需要更好的解决方案SimplePingHelper SimplePing

- (void)tapPing {
    [SimplePingHelper ping:@"www.google.com"
        target:self sel:@selector(pingResult:)];
}

- (void)pingResult:(NSNumber*)success {
    if (success.boolValue) {
        [self log:@"SUCCESS"];
    } else {
        [self log:@"FAILURE"];
    }
}

【问题讨论】:

  • 最佳评论“如果您只需要知道是否可以获取数据,HTTP 支持称为无内容的标头和特殊的 HTTP 方法只是为此...通过使用此方法,您不仅可以阻止该线程但浪费网络带宽和电池。不好。-@Michael Voznesensky"
  • -(BOOL)connectedToNetwork { NSURL* url = [[NSURL alloc] initWithString:@"google.com/"]; NSData* data = [NSData dataWithContentsOfURL:url]; if (data != nil) return YES; return NO; } 这是正确答案,请先检查。
  • @AshokLondhe 是的,它是正确的,但有欠缺,请注意这些家伙,它的下载网址。
  • “如果您尝试以这种方式检查视频链接是否可用,您的用户会杀了您)– FreeNickname”,但简单的解决方案是最好的:)

标签: ios objective-c


【解决方案1】:

首选方法是尝试连接,如果由于无法访问主机而导致连接失败,请检查并监控网络状态。见Reachability。如果网络状态表明可以访问主机,请重试。

还有几个第三方库通过 Apple 的 Reachability 接口实现了方便的 API。

【讨论】:

  • 是的 可达性很好,但很强大,我需要更简单的解决方案。
  • @Bimawa 这是最简单的解决方案;)
  • 我为你竖起大拇指 :)
【解决方案2】:

我使用AFNetworking 来检查可达性。

Pod 文件:pod "AFNetworking"

您必须在要使用的文件中包含AFNetworkReachabilityManager.h

这是一个用于检查可达性的示例基本代码。

// -- Start monitoring network reachability (globally available) -- //
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];

    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        NSLog(@"Reachability changed: %@", AFStringFromNetworkReachabilityStatus(status));


        switch (status) {
            case AFNetworkReachabilityStatusReachableViaWWAN:
            case AFNetworkReachabilityStatusReachableViaWiFi:
                // -- Reachable -- //
                NSLog(@"Reachable");
                break;
            case AFNetworkReachabilityStatusNotReachable:
            default:
                // -- Not reachable -- //
                NSLog(@"Not Reachable");
                break;
        }

    }];

【讨论】:

  • 麻雀上也有枪
  • 对不起,我不明白你的评论。
  • sry 我,我只是试着说它不是简单的解决方案。
【解决方案3】:

一个有效的 URL 由这些字符组成:

  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=

你只需要创建一个字符串检查函数来验证你的 URL 的字符是落入还是落出。

【讨论】:

  • 伙计们,我需要检查未验证的可用 URL。只是ping
【解决方案4】:

很简单:

-(BOOL)connectedToNetwork  {
    NSURL* url = [[NSURL alloc] initWithString:@"http://google.com/"];
    NSData* data = [NSData dataWithContentsOfURL:url];
    if (data != nil)
        return YES;
    return NO;
}

创立this

【讨论】:

  • 这是错误的,你的回答告诉他他是否连接到谷歌,而不是他的 URL 的有效性。
  • 小心我不需要验证 URL,我需要知道:“我可以获取数据吗?”
  • 如果你试图通过这种方式检查视频链接是否可用,你的用户会杀了你)
  • @FreeNickname 根据我的说法..如果他真的想检查主机是否可用......他应该使用可达性
  • @Bhavin,我完全同意你的看法。我只是想说,OP 实际上认为这是一个很好的工作解决方案,这就是他/她将其发布为答案的原因。
猜你喜欢
  • 2013-04-30
  • 1970-01-01
  • 2010-12-07
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2011-03-31
相关资源
最近更新 更多