iOS swift 网络请求框架(AFN/Moya/Alamofire)和原生API

240 篇文章 1 订阅
50 篇文章 0 订阅

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,一部分用苹果原生的网络接口

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值