Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何测试URL的可用性?_Ios_Objective C - Fatal编程技术网

Ios 如何测试URL的可用性?

Ios 如何测试URL的可用性?,ios,objective-c,Ios,Objective C,我找不到解决这个问题的简单方法。 我需要对我的URL进行简单的检查逻辑,并返回YES(如果可用)或NO(如果不可用) 我发现: -(BOOL)connectedToNetwork { NSURL* url = [[NSURL alloc] initWithString:@"http://google.com/"]; NSData* data = [NSData dataWithContentsOfURL:url]; if (data != nil) re

我找不到解决这个问题的简单方法。 我需要对我的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;
}
创立 但我需要更正确的答案

UPD

我找到了苹果

UPD1

在Thx all上找到答案

UPD2

需要更好的解决方案:

其原因很简单:

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

创建的

有效URL由以下字符组成:

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

您只需使用一个字符串检查功能来验证URL的字符是否插入或退出。

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

还有一些第三方LIB通过苹果的可达性接口实现了一个方便的API。

我用它来检查可达性

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;
        }

    }];

这是错误的,你的答案告诉他他是否连接到谷歌,而不是他的URL的有效性。小心,我不需要验证URL,我需要知道:“我是否可以获取数据?”如果你试图通过这种方式检查视频链接是否可用,你的用户会杀了你)@freeigname根据我的说法……如果他现在真的想检查主机是否可用……他应该使用reachability@Bhavin,我完全同意你的看法。我只是想说,OP实际上认为这是一个很好的工作解决方案,这就是为什么他/她将其作为答案发布。伙计们,我需要检查可用URL而不是验证。Ping Best comment“如果您只需要知道是否可以获取数据,HTTP支持称为“无内容”的头文件和专门用于此目的的HTTP方法…使用此方法不仅会阻止该线程,而且会浪费网络带宽和电池。糟糕。–@Michael Voznesensky“可能与-(BOOL)ConnectedNetwork重复{NSURL*url=[[NSURL alloc]initWithString:@;NSData*data=[NSData dataWithContentsOfURL:url];如果(data!=nil)返回YES;返回NO;}这是正确的答案。请先检查它。@AshokLondhe是正确的,但有一个缺点,请注意大家是如何下载它的url的。”如果你试图通过这种方式检查视频链接是否可用,你的用户会杀了你“,但由于简单的解决方案是最好的:)是的,可达性很好,但非常强大,我需要更简单的解决方案。@Bimawa这是最简单的解决方案;)我为你指手画脚:)还有一把枪在Sparrow上对不起,我不明白你的评论。对不起,我只是试着说这不是简单的解决方案。
// -- 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;
        }

    }];