IOS网络协议HTTP

devtools/2025/1/16 1:51:02/

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/devtools/150808.html

相关文章

ASP.NET Core与GraphQL集成

一、引言&#xff1a;探索 C# 与ASP.NET Core、GraphQL 的协同魅力 在当今数字化浪潮中&#xff0c;Web 开发领域不断演进&#xff0c;新技术层出不穷。C# 作为.NET 平台上的中流砥柱&#xff0c;凭借其强大的功能与优雅的语法&#xff0c;成为众多开发者构建各类应用程序的得…

Linux创建server服务器实现多方信息收发

一&#xff0c;服务端 1.创建socket套接字&#xff0c;用于网络通信&#xff0c;同一台机器上的进程也可以通过本地套接字进行通信 //1.socket s_fd socket(AF_INET,SOCK_STREAM,0); if(s_fd -1){ perror("socket"); exit(-1); } //server address s_addr.sin_fami…

【CSS】渐变光晕

dom元素 <div id"box" class"glow"></div>css样式 #box { height: 300px;width: 300px;background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 127, color-stop(0%, #CE1A1A), color-stop(100%, #ffffff));background-image:…

(Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应

LORA-FA&#xff1a;针对大型语言模型微调的内存高效低秩自适应 paper是香港浸会大学发表在Arxiv 2023的工作 paper title&#xff1a;LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING ABSTRACT 低秩自适应 (LoRA) 方法可以大大减少微调…

战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具

深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具 在现代商业管理中,合理地分析和管理产品组合对于企业的成功至关重要。波士顿矩阵(BCG Matrix),又称为成长份额矩阵,是一种由波士顿咨询集团(Boston Consulting Group)在20世纪70年代提出的战略工具,用于帮助…

深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04

目录 5、 谁来写Proxy及Stub类呢? 如何考虑人的分工 IA接口知识取得的难题 在编程上&#xff0c;有什么技术可以实现这个方法&#xff1f; 范例 5、 谁来写Proxy及Stub类呢? -- 强龙提供AIDL工具&#xff0c;给地头蛇产出Proxy和Stub类 如何考虑人的分工 由框架开发者…

excel VBA 基础教程

这里写目录标题 快捷键选择所有有内容的地方 调试VBA录制宏&#xff0c;打开VBA开发工具录制宏,相当于excel自动写代码&#xff08;两个表格内容完全一致才可以&#xff09; 查看宏代码保持含有宏程序的文件xlsm后缀&#xff08;注意很容易有病毒&#xff09;宏文件安全设置 使…

pytorch小记(三):pytorch中的最大值操作:x.max()

pytorch小记&#xff08;三&#xff09;&#xff1a;pytorch中的最大值操作&#xff1a;x.max&#xff08;&#xff09; 初始化张量&#xff1a;1. x.max(dim0)对比每个位置的值&#xff1a;合并最大值&#xff1a; 2. x.max(dim1)3. x.max(dim2)总结 在 PyTorch 中&#xff0c…