Swift 网络访问库Alamofire 访问https localhost服务器

简介: Alamofire提供了比IOS标准库便捷的网络访问接口,沿用了Objective-C的AFNetwork的各种优点,所以成为了我迁移到Swift平台不二的选择。

Alamofire提供了比IOS标准库便捷的网络访问接口,沿用了Objective-C的AFNetwork的各种优点,所以成为了我迁移到Swift平台不二的选择。
Alamofire文档地址
不过刚刚上手就碰到了很初级的问题:使用https连接本地的服务器总是报错。

  • 为什么一定要用把人逼疯的https呢? *

2016年6月14日在WWDC 2016开发者大会上,苹果宣布了一个最后期限:2017年1月1日起,苹果App Store中的所有App都必须启用 App Transport Security(ATS)安全功能。

所以 现在开发一个商用的程序必须使用https来访问后台API啦

在多次碰壁无果后,只好把问题分解隔离,各个击破。

  • Alamofire的 https 连接问题。访问个baidu.com试试?
  • Alamofire 的 localhost 自定义证书的问题。
  • ATS IOS系统网络安全配置。

经验如下:

  1. Alamofire的 https 连接问题, 报错 Error Domain=NSURLErrorDomain Code=-999 “cancelled”。问题主要是由于sessionManager的生命周期导致的。通过把sessionManager 设置为类成员,避免在response回调时提前销毁,解决了正常访问baidu.com的问题。
import Foundation
import Alamofire

class NetworkManager {

    var manager: Manager?

    init() {
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        manager = Alamofire.Manager(configuration: configuration)
    }
}

2.Alamofire 的 localhost 自定义证书的问题。
需要在serverTrustPolicies中加上域名,disableEvaluation选项。注意使用域名,不需要端口等其他参数。

    class NetworkManager {

var manager: SessionManager?

init() {
    let serverTrustPolicies: [String: ServerTrustPolicy] = [
        "10.68.24.127" : .disableEvaluation
    ]
    let configuration = URLSessionConfiguration.default
    manager = Alamofire.SessionManager(
        configuration: configuration,
        serverTrustPolicyManager :ServerTrustPolicyManager(policies: serverTrustPolicies)
    )
}
    }
  1. 系统ATS安全。
    该功能属于IOS的新功能,需要配置info.plist文件。增加域名对应的配置项。
<key>NSAppTransportSecurity</key><dict>
<key>NSExceptionDomains</key>
<dict>
    <key>url.com</key>
    <dict>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <key>NSExceptionRequiresForwardSecrecy</key>
        <false/>
        <key>NSIncludesSubdomains</key>
        <true/>
    </dict>
</dict>

由于上面3种因素混合,导致了这个问题难以解决。
最后Alamofire的作者提供了一个很好的建议:

  • 在ServiceTrustManger的数组中设置断点来判断究竟是ATS系统阻拦了请求,还是Alamofire本身的问题。
目录
相关文章
|
3天前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
23 1
|
2天前
|
监控 安全 数据挖掘
网络游戏服务器如何有效防护DDoS与CC攻击
随着网络游戏行业的蓬勃发展,其背后的服务器架构日益复杂,同时也面临着前所未有的网络安全威胁。其中,分布式拒绝服务(DDoS)和CC(Challenge Collapsar,一种针对网页的攻击方式)攻击尤为突出,它们通过大量伪造请求或恶意流量,使服务器资源耗尽,导致服务中断或响应缓慢。因此,保障网络游戏服务器的安全,有效防护DDoS与CC攻击,已成为游戏行业亟待解决的问题。
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
53 4
|
2月前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【7月更文挑战第31天】互联网的发展使网络编程成为软件开发的关键部分. Python以简洁、功能强大著称, 在此领域尤显突出. `urllib`作为标准库, 自Python初期便支持URL处理, 如读取URL (`urllib.request`) 和解析 (`urllib.parse`). 尽管API底层, 但奠定了网络编程基础.
37 4
|
8天前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
15天前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
31 6
|
18天前
|
缓存 安全 Linux
本地YUM源大揭秘:搭建您自己的Linux软件宝库,从此告别网络依赖!一文掌握服务器自给自足的终极技能!
【8月更文挑战第13天】在Linux中,YUM是一款强大的软件包管理工具,可自动处理依赖关系。为适应离线或特定安全需求,本指南教你搭建本地YUM源。首先创建存放软件包的`localrepo`目录,复制`.rpm`文件至其中。接着,安装并运用`createrepo`生成仓库元数据。随后配置新的`.repo`文件指向该目录,并禁用GPG检查。最后,清理并重建YUM缓存,即可启用本地YUM源进行软件搜索与安装,适用于网络受限环境。
47 3
|
2月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
52 10
|
2月前
|
数据采集 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
【7月更文挑战第30天】在网络数据抓取中,Python的`requests`库凭借其简洁的API和强大功能脱颖而出。首先确保已通过`pip install requests`安装库。实战演练包括:发送GET请求获取数据(如`requests.get(url)`),处理JSON响应(利用`.json()`方法解析),添加请求头以绕过反爬虫机制(如设置`User-Agent`),以及发送POST请求提交数据。掌握这些技能的同时,务必遵守法律法规和网站政策。
43 6
|
7天前
|
存储 网络协议 物联网
网络中的“客户端”和“服务器
【8月更文挑战第24天】
18 0

热门文章

最新文章

下一篇
云函数