iOS:根据日志去定位网络请求发生的错误是由于服务端造成的,还是客户端造成的?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一、介绍

在项目开发中,服务端和客户端的协作尤为重要,而连接它们的最重要的环节之一就是网络请求,对于服务端而言,如果这个环节出现了错误,那么安全性就无从谈起,同时对于客户端而言,如果这个模块出现了错误,那么后续的开发就无法继续进行下去。诚然,当网络请求真的出现了问题,快速定位问题的源头就显得迫在眉睫了。本博文提供三种定位问题源头的方法,判断是服务端的原因,还是客户端的原因,避免大家找问题浪费大量的无用功。

 

二、ATS

一个配置网络请求方式的配置字段,NSAppTranportSecurity下的 Allow Arbitrary Loads,设置为NO,默认所有的网络请求都必须走HTTPS(SSL/TLS)协议;如果设置为YES,即是全局设置,既可以走HTTP协议,也可以走HTPPS(SSL/TLS)协议。

 

三、问题定位方式(查看网络请求的详细log日志)

第一种方式:配置CFNETWORK_DIAGNOSTICS=1

步骤:打开xcode的项目,找到edit scheme中的run,然后选择Arguments,给Envaironment Variables添加CFNETWORK_DIAGNOSTICS=1,最后运行程序发送网络请求即可。此时在consolelog控制器会给出网络请求详细的log日志文件路径,根据路径找到就OK了。配置如图:

点击按钮测试发送请求,我以我公司的官方来测试(本公司服务端已做了https配置) 

复制代码
//  ViewController.m
//  RequestDemo
//  Created by 夏远全 on 16/12/25.
//  Copyright © 2016年 广州市东德网络科技有限公司. All rights reserved.
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    //发送请求
    UIButton *requestBtn = [[UIButton alloc] initWithFrame:CGRectMake(140, 200, 200, 80)];
    requestBtn.backgroundColor = [UIColor redColor];
    [requestBtn setTitle:@"requestSend" forState:UIControlStateNormal];
    [requestBtn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
    [requestBtn addTarget:self action:@selector(requestSend) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:requestBtn];
}

//发送请求
-(void)requestSend{
    
    NSURL *URL = [NSURL URLWithString:@"https://www.biaojiepay.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"complete");
    }];
}
@end
复制代码

打印的显示log日志文件路径如下:

2016-12-26 00:29:26.910 RequestDemo[966:51790] CFNetwork diagnostics log file created at: /Users/FanLei/Library/Developer/CoreSimulator/Devices/C4192179-66A1-40C6-B09B-095C1248F68E/data/Containers/Data/Application/FE58F06E-B7BC-428E-82AE-0ED0A567ACD1/Library/Logs/CrashReporter/CFNetwork_com.biaojiepay.RequestDemo_966.nwlrb.log
2016-12-26 00:29:27.049 RequestDemo[966:50107] complete

此时按照提供的路径去访问该文件查看,里面记录了网络请求的详细日志信息

  View Code

 

第二种方式:采用mac自带的命令行查看网络请求日志,即/usr/bin/nscurl --ats-diagnostics --verbosehttps://www.biaojiepay.com(这个是带上的测试网址)

使用该命令行发送请求测试,我以我公司的官方来测试(本公司服务端已做了https配置,所有验证都会通过Pass)

终端运行结果如下:可以看到全都支持,所以pass通过

  View Code

 

第三种方式:如果是服务端的问题,可以采用TLSTool来帮助你定位。(坑:TSLTool不能再Xcode8下编译)

下载链接:https://developer.apple.com/library/content/samplecode/sc1236/Introduction/Intro.html#//apple_ref/doc/uid/DTS40014927

先下载工具编译后,再在终端测试示例:我以我公司的官方来测试,端口443(本公司服务端已做了https配置,所有验证都会通过Pass)

./TLSTool s_client -connect  www.biaojiepay.com:443

GET https://www.biaojiepay.com  HTTP/1.1

Host: www.biajiepay.com

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6221088.html ,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Linux
linux定位日志文件
在Linux中查找名为"log.txt"的日志文件,可使用`find`命令从根目录开始搜索:`find / -name log.txt 2>/dev/null`。此命令会忽略错误信息,确保只显示找到的文件路径。
45 1
|
23天前
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
|
3月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
127 56
|
28天前
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
55 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
38 0
|
3月前
|
网络协议 Go Windows
【应用服务 App Service】App Service中抓取网络日志
【应用服务 App Service】App Service中抓取网络日志
|
3月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
3月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
3月前
|
缓存 NoSQL Java
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤