IOS网络协议HTTP

news/2025/1/13 18:37:36/

1、网络层基础知识

1.1、HTTP

协议层级连接性可靠性应用场景
TCP传输层面向连接文件传输、网页浏览
UDP传输层无连接实时通信、流媒体
HTTP应用层基于TCP由TCP保证网页浏览、API通信

HTTP通过过程

https://i-blog.csdnimg.cn/direct/06548f9e05dc467894d033585bb6d77e.png" width="398" />

  • ④⑤ 是应用层通信,①②③⑥⑦⑧⑨是运输层通信
  • ①②③是三次握手建立通信,⑥⑦是断开Client->Server的通信,⑧⑨是断开Server->Client的通信

HTTP报文格式

https://i-blog.csdnimg.cn/direct/dfe84045d5d344618e405c3296988fb8.png" width="507" />

1.2、HTTPS

属性HTTPHTTPS
安全性明文传输,容易被窃听和篡改数据加密,提供机密性和完整性
端口80443
加密协议使用SSL/TLS加密
身份验证提供数字证书,验证服务器身份
性能
使用场景低敏数据传输,普通网页流岚高敏数据传输,登录、支付页面
  • SSL 是早期的安全通信协议,已被逐步淘汰
  • TLS 是 SSL 的改进版,提供更高的安全性和性能

HTTP与HTTPS的区别

https://i-blog.csdnimg.cn/direct/39c4f88f9d6a4c7e942ea68bdd41081e.png" width="378" />

SSL通信建立过程

https://i-blog.csdnimg.cn/direct/925d343edd4b4e7ab76d53d6bb5b9298.png" width="576" />

客户端验证服务端证书有两点内容:

  1. 验证服务端证书的数字摘要 和 服务端证书解密之后的内容 是否一致
  2. 验证证书链的根证书(一般保存在浏览器或操作系统中)是否在可信任证书列表中

2、代码示例

https://i-blog.csdnimg.cn/direct/786ebda057dc4b16b7599a4b423f6da5.png" width="256" />

ViewController.h

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end

ViewController.m

#import "ViewController.h"@interface ViewController ()//手机号输入框
@property(nonatomic, strong) UITextField *etPhone;
//搜索按钮
@property(nonatomic, strong) UIButton *btnSearch;
//结果展示
@property(nonatomic, strong) UITextView *tvResult;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];[self initUI];
}-(void)initUI{//手机号输入框self.etPhone = [[UITextField alloc]init];self.etPhone.borderStyle = UITextBorderStyleRoundedRect;self.etPhone.placeholder = @"请输入手机号";self.etPhone.keyboardType = UIKeyboardTypeNumberPad;self.etPhone.translatesAutoresizingMaskIntoConstraints = NO;[self.view addSubview:self.etPhone];//搜索按钮self.btnSearch = [UIButton buttonWithType:UIButtonTypeSystem];self.btnSearch.backgroundColor = [UIColor redColor];[self.btnSearch setTitle:@"查询归属地" forState:UIControlStateNormal];self.btnSearch.titleLabel.font = [UIFont boldSystemFontOfSize:24];[self.btnSearch setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];self.btnSearch.translatesAutoresizingMaskIntoConstraints = NO;[self.btnSearch addTarget:self action:@selector(searchPhoneNumber) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.btnSearch];//结果展示self.tvResult = [[UITextView alloc]init];self.tvResult.backgroundColor = [UIColor whiteColor];self.tvResult.layer.borderColor = [UIColor grayColor].CGColor;self.tvResult.layer.borderWidth = 1.0;self.tvResult.layer.cornerRadius = 6.0;[self.tvResult setTextColor:[UIColor blackColor]];self.tvResult.scrollEnabled = YES;self.tvResult.font = [UIFont systemFontOfSize:24];self.tvResult.translatesAutoresizingMaskIntoConstraints = NO;[self.view addSubview:self.tvResult];//设置布局-约束布局[NSLayoutConstraint activateConstraints:@[//手机号输入框[self.etPhone.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:20],[self.etPhone.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor constant:20],[self.etPhone.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor constant:-20],[self.etPhone.heightAnchor constraintEqualToConstant:40],//搜索按钮[self.btnSearch.topAnchor constraintEqualToAnchor:self.etPhone.bottomAnchor constant:30],[self.btnSearch.leadingAnchor constraintEqualToAnchor:self.etPhone.leadingAnchor constant:20],[self.btnSearch.trailingAnchor constraintEqualToAnchor:self.etPhone.trailingAnchor constant:-20],[self.btnSearch.heightAnchor constraintEqualToConstant:40],//结果展示文本[self.tvResult.topAnchor constraintEqualToAnchor:self.btnSearch.bottomAnchor constant:30],[self.tvResult.leadingAnchor constraintEqualToAnchor:self.etPhone.leadingAnchor],[self.tvResult.trailingAnchor constraintEqualToAnchor:self.etPhone.trailingAnchor],[self.tvResult.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor constant:-20]]];}//搜索手机号
-(void)searchPhoneNumber{NSString *phoneNumber = self.etPhone.text;if (phoneNumber == nil || phoneNumber.length < 1) {self.tvResult.text = @"手机号不可为空";return;}NSString *urlStr = [NSString stringWithFormat:@"https://cx.shouji.360.cn/phonearea.php?number=%@", phoneNumber];NSURL *url = [NSURL URLWithString:urlStr];NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession]dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if(error){//请求失败dispatch_async(dispatch_get_main_queue(), ^{self.tvResult.text = [NSString stringWithFormat:@"请求失败: %@", error.localizedDescription];});return;}NSError *jsonError;NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];if (jsonError) {//json解析异常dispatch_async(dispatch_get_main_queue(), ^{self.tvResult.text = [NSString stringWithFormat:@"参数解析失败:%@", jsonError.localizedDescription];});return;}NSDictionary *dataDict = responseDict[@"data"];if (dataDict) {NSString *provice = dataDict[@"province"]?:@"未知";NSString *city = dataDict[@"city"]?:@"未知";NSString *sp = dataDict[@"sp"]?:@"未知";NSString *result = [NSString stringWithFormat:@"归属地:%@  %@\n运营商:%@", provice, city, sp];dispatch_sync(dispatch_get_main_queue(), ^{self.tvResult.text = result;});}else{dispatch_sync(dispatch_get_main_queue(), ^{self.tvResult.text = @"未查询到结果";});}}];[dataTask resume];
}@end


http://www.ppmy.cn/news/1562862.html

相关文章

【Rust】函数

目录 思维导图 1. 函数的基本概念 1.1 函数的定义 2. 参数的使用 2.1 单个参数的示例 2.2 多个参数的示例 3. 语句与表达式 3.1 语句与表达式的区别 3.2 示例 4. 带返回值的函数 4.1 返回值的示例 4.2 返回值与表达式 5. 错误处理 5.1 错误示例 思维导图 1. 函数…

Go 中的单引号 (‘)、双引号 (“) 和反引号 (`)

在 Go 中&#xff0c;单引号 ()、双引号 (") 和反引号 () 都有不同的用途和含义&#xff0c;具体如下&#xff1a; 1. 单引号 () 单引号用于表示 字符字面量&#xff08;单个字符&#xff09;。在 Go 中&#xff0c;字符是一个单独的 Unicode 字符&#xff0c;并且它的类…

转运机器人在物流仓储行业的优势特点

在智能制造与智慧物流的浪潮中&#xff0c;一款革命性的产品正悄然改变着行业的面貌——富唯智能转运机器人&#xff0c;它以卓越的智能科技与创新的设计理念&#xff0c;引领着物流领域步入一个全新的高效、智能、无人的时代。 一、解放双手&#xff0c;重塑物流生态 富唯智能…

前端拿到zip中所有文件并下载为新的zip文件

问题原因&#xff1a;后端返回了一个zip格式文件供前端下载&#xff0c;然后下载后&#xff0c;形成了zip套zip的形式&#xff0c;当后端不愿处理时&#xff0c;前端不能坐以待毙 PS&#xff1a;当压缩包文件量过大&#xff0c;前端可能会出问题&#xff08;脑测&#xff0c;未…

天天 AI-250110:今日热点-字节豆包Web端反超百度文心一言,DeepSeek也发力了|量子位智库月报

2AGI.NET&#xff1a;天天AI-20250109 人工智能&#xff08;AI&#xff09;和硬件技术继续以惊人的速度发展&#xff0c;不断刷新我们对技术边界的认知。从英伟达的RTX 50系列显卡到清华团队的数学推理突破&#xff0c;再到AI算力的多个利好&#xff0c;这些技术的发展正在推动…

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…

【Rust练习】27.Module

练习题来自&#xff1a;https://practice-zh.course.rs/crate-module/module.html 建议在命令行下操作完成本节内容&#xff0c;Windows 11/10 首选 Windows 终端&#xff0c;好看&#xff0c;支持渲染中文字体&#xff0c;缺点是功能太少了&#xff1b;其次推荐 mobaxterm&am…

Jaeger UI使用、采集应用API排除特定路径

Jaeger使用 注&#xff1a; Jaeger服务端版本为&#xff1a;jaegertracing/all-in-one-1.6.0 OpenTracing版本为&#xff1a;0.33.0&#xff0c;最后一个版本&#xff0c;停留在May 06, 2019。最好升级到OpenTelemetry。 Jaeger客户端版本为&#xff1a;jaeger-client-1.3.2。…