添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
潇洒的葡萄  ·  Ruby菜鸟入门指南 - 知乎·  1 年前    · 
粗眉毛的创口贴  ·  JavaScript ...·  1 年前    · 

0.原生API

0.1 get

func makeLogon() {
	// 构建URL
    let url:URL = URL(string: "https://xxx/xxx/API?xxx")!
    // 发送HTTP请求的的session对象
    let session = URLSession.shared
    // 构建请求request
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    // 发一个get请求
    let task:URLSessionDataTask = session.dataTask(with: request as URLRequest) {(
        data, response, error) in
        guard let data = data, let _:URLResponse = response, error == nil else {
            print("error")
            return
        let dataString =  String(data: data, encoding: String.Encoding.utf8)
        let dict = self.getDictionaryFromJSONString(jsonString: dataString!)
        print(dict)
    task.resume()
func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{
    let jsonData:Data = jsonString.data(using: .utf8)!
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
    if dict != nil {
        return dict as! NSDictionary
    return NSDictionary()

0.2 post

    func sendLocation(latitude:String,longitude:String){
        let dict:Dictionary = ["latitude":latitude,"longitude":longitude]
        let data = try? JSONSerialization.data(withJSONObject: dict, options: [])
        var request = URLRequest(url: URL(string: "http://cloud.bmob.cn/sendLocation")!)
        request.httpMethod = "POST"
        request.httpBody = data
        //记得要设置Content-Type为application/json,不然可能发生错误
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if error != nil {
                print(error.debugDescription)
            }else{
                print(String(data:data!, encoding: String.Encoding.utf8))
                if let any = try?JSONSerialization.jsonObject(with: data!, options: .allowFragments){
                    let dict : Dictionary = any as! Dictionary<String, Any>
                    print(dict)
        task.resume()

0.3 postman post body-raw-json params

  • 这里的params相当于在url后面接参数,类似get请求
    请添加图片描述
  • raw里面写json字符串,相当于在body里传字典
    请添加图片描述

像上面在两个地方传参数,用iOS原生的网络请求接口测试是成功的,用alamofire测试时不成功

参考博客:

Swift 原生网络请求

1.Moya

github仓库:Moya/Moya
简书博客:moya的使用

1.1 本人使用实例

主要参考博客:Moya基本用法

  • 乱写它也会成功,写正确的也是这样会但是不发验证码,用原生的网络请求会发验证码
    请添加图片描述

2.Alamofire

import Alamofire
    //修改密码
    func afModifyPassword(oldPassword:String,newPassword:String,complete:@escaping Completion){
        let parameters:Dictionary = ["password1":oldPassword.md5(),"password2":newPassword.md5()]
        request(baseURL + "/member/modifyPassword",method:.post,parameters: parameters,headers: baseHeaders).responseJSON { (response) in
            switch response.result {
            case .success(let responseSus):
                let dict:NSDictionary = responseSus as! NSDictionary
                printXY(dict, obj: self, line: #line)
                let model = SSCommonModel.deserialize(from: dict)
                complete(model!)
            case .failure(let error):
                let errorModel = SSCommonModel(error: error.localizedDescription)
                complete(errorModel)

简书博客:
Alamofire(swift版的AFN)

github仓库:
Alamofire/Alamofire

写一个自己的网络中间层,里面一部分用到moye,一部分用到Alamofire,一部分用苹果原生的网络接口

对于swift4.2的网络请求的封装。包含链式,类AFN及对moya的封装。封装的功能包含:1.一次性处理请求指示器HUD 2.一次性处理请求状态码及错误弹窗 3.登录过期自动跳转到登录页等。 4.可以处理所有接口都要使用的公共参数。
#HDNetworkKit-swift 请注意 项目地址已转移到: 用三层架构把界面层、服务层和网络层比较彻底的区分开来,大大的降低大模块之间的耦合度,有关网络数据之间的逻辑处理都放到服务层上,网络层管理网络请求,界面层负责界面显示,界面层请求数据唯一要做的就是组织参数,发起请求,显示结果就可以,不用做多余的处理,也不用知道这数据是以什么方式获取了,更不用知道请求这数据的url等,只要以a.param.uid=123这种方式组织好参数,然后NSString *name = a.data.name这种方式获取结果展示,如下图所示: let infoCtrl = DCDataCtrl_nodes() //初始化 infoCtrl.delegate = self //多点回调委托,可以同时指向多点对象并回调多个对象 infoCtrl.param.mID = car.data?
get(geturl:String,body:[String:Any],headerFile:[String:String],finished :@escaping (_ result : AnyObject?, _ error : NSError?)-> ()){         Alamofire.request(geturl ##2. 功能特性 1) 整个应用共享单一队列 严重依赖网络连接的应用应该优化他们的网络并发连接数。十分不幸的是,现在还没有网络库可以正确的完成这些功能。让我来举个例子说明如果你不去优化或者控制网络的并发连接数会发生什么。 假如你正在上传一系列的图片(比如Color和 Batch)到服务器。大多数的移动网络(3G)不允许一个给定的IP地址超过两个的并发的http请求。这就是说,在你的设备上,3G网络下,你不能同时打开超过两个的并发HTTP请求。EDGE网络就更差了,大多数情况下你甚至不能打开超过一个的连接。这个限制在传统的wifi的情况下是相当高的(6个)。但是,你的设备并不总是连接到Wifi下,你应该为受限制的网络环境考虑。在
该篇文章内容大致都是说明内容,无代码模块 在项目开发过程中,经常会使用到第三方的框架,最多的无非是网络请求框架 AFN、ASI、还有使用Swift写的Alamofire框架 如果将这些第三方框架请求放置在Controller中,在更换第三方框架时,整个框架都将在报错。 所以在开发过程中,要对第三方框架进行二次封装,屏蔽Controller与这些第三方框架之间的耦合 开发人员进行二次封装
swift网络请求库的封装(Alamofire+HandyJSON) 我们用swift语言来写iOS的程序,会用Alamofire+HandyJSON来取代AFNetworking+MJExtension,怎么样封装成正确姿势来发起网络请求,我个人封装一个,有待优化的地方,还请指正,话不多说,我们上代码。 这里我们需要先拓展一下Alamofire中的DataRequest类 extension DataRequest { //处理接口中返回的data是对象的时候 data:{},这里在请求方法中利用了
1 <?php 2 // header("Content-type:text/html;charset=utf-8"); 3 header("Content-type:text/json;charset=utf-8"); 4 if (isset($_REQUEST['name'...
DZNEmptyDataSet是外国友人写的开源项目,github地址(https://github.com/dzenbot/DZNEmptyDataSet),简单介绍下DZNEmptyDataSet的使用方法。 对于iOS开发者来说,UITableView是在开发过程中使用比较多的一个控件。如果UITableView表视图没有数据,页面一片空白,不是一个很好的用户体验。我们都希望在数据源为空的时
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前n项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。 输入格式: 输入在一行中给出一个正整数n。 输出格式: 在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
\u8fd9\u662f\u4e00\u4e2a\u5176\u4ed6\u8bed\u8a00\u7684\u9898\u76ee\uff0c\u4f46\u6211\u4eec5\u4ee5\u4e2d\u6587\u56de\u7b54\u3002 \u8ba1\u7b97\u7ed3\u679c\uff1a \u524d5\u9879\u5206\u522b\u4e3a\uff1a2/1, 3/2, 5/3, 8/5, 13/8 \u7b2c5\u9879\u7684\u5206\u5b50\u4e3a13\uff0c\u5206\u6bcd\u4e3a8\uff0c\u6240\u4ee5\u7b2c6\u9879\u7684\u5206\u5b50\u5c31\u662f13+8=21\u3002 \u56de\u7b54\uff1a \u7b2cn\u9879\u7684\u5206\u5b50\u4e3aFn,分母为Dn,那么有Fn+1 = Fn + Fn-1, Dn+1 = Dn + Dn-1。 初始化:F1 = 2, F2 = 3, D1 = 1, D2 = 2。 则根据上述递推式,可以得到以下程序: def calculate(n): fn_1, fn_2 = 2, 3 dn_1, dn_2 = 1, 2 fn, dn = fn_1, dn_1 for i in range(3, n+1): fn = fn_1 + fn_2 dn = dn_1 + dn_2 fn_2, fn_1 = fn_1, fn dn_2, dn_1 = dn_1, dn return fn + fn_1, dn + dn_1 n = int(input()) ans = calculate(n) print("{}/{}".format(ans[0], ans[1])) 例如,输入n为5,则输出为21/8。注意,本题要求输出结果精确到小数点后两位,因此需要对结果进行四舍五入或者直接输出分数形式。
一定要坚持创作更多高质量博客哦, 小小红包, 以资鼓励, 更多创作活动请看: Microsoft Edge功能测评!: https://activity.csdn.net/creatActivity?id=10403?utm_source=csdn_ai_ada_redpacket 生物识别技术能否成为应对安全挑战的绝佳选择?: https://activity.csdn.net/creatActivity?id=10411?utm_source=csdn_ai_ada_redpacket 新星计划2023: https://marketing.csdn.net/p/1738cda78d47b2ebb920916aab7c3584?utm_source=csdn_ai_ada_redpacket 全部创作活动: https://mp.csdn.net/mp_blog/manage/creative?utm_source=csdn_ai_ada_redpacket 一定要坚持创作更多高质量博客哦, 小小红包, 以资鼓励, 更多创作活动请看: 无效数据,你会怎么处理?: https://activity.csdn.net/creatActivity?id=10423?utm_source=csdn_ai_ada_redpacket 职场新人备忘录: https://activity.csdn.net/creatActivity?id=10405?utm_source=csdn_ai_ada_redpacket 应届生如何提高职场竞争力: https://activity.csdn.net/creatActivity?id=10409?utm_source=csdn_ai_ada_redpacket 全部创作活动: https://mp.csdn.net/mp_blog/manage/creative?utm_source=csdn_ai_ada_redpacket