首页 文章 精选 留言 我的

精选列表

搜索[工具模块],共10000篇文章
优秀的个人博客,低调大师

swift4,网络请求工具Moya

在OC中,我们使用AFNetworking来进行网络请求,简洁方便。在swift中,我们使用Moya来进行网络请求,Moya封装了Alamofire,可以更加方便的进行网络请求。初次使用Moya,还是觉得稍稍有些不习惯。在这里,记录下使用过程。 一、新建项目,新建cocoapod,导入Moya库。 platform :ios, '9.0' inhibit_all_warnings! target 'IJKPlayerDemo' do use_frameworks! pod 'Moya' end 导入之后,我们发现项目中多了几个文件: image.png 这就是Moya的库文件了。 二、新建三个文件,当然了,放在一个文件里也是可以的。不过,放在三个文件里是为了更加清晰和方便管理。 image.png NetService.swift // // NetService.swift // IJKPlayerDemo // // Created by iOS on 2018/5/28. // Copyright © 2018年 weiman. All rights reserved. // import UIKit enum NetService { /// 直播列表数据 case liveList } 这个文件是存储接口的名称的,也就是每一个网络请求都会有一个自定义的名字,类似于函数的声明。这里要把参数也要写全。 NetService+Extension.swift // // NetService+Extension.swift // IJKPlayerDemo // // Created by iOS on 2018/5/28. // Copyright © 2018年 weiman. All rights reserved. // import UIKit import Moya /// NetService的扩展,记得一定要遵循TargetType协议。 extension NetService: TargetType { // 根路径,一般放域名 var baseURL: URL { return URL(string: "http://www.mocky.io/v2")! } // 具体路径,每一个网络请求的具体路径部分 var path: String { switch self { case .liveList: return "5b0cc5153300005200b400aa" } } // 请求方式,get还是post var method: Moya.Method { switch self { case .liveList: return .get } } // 参数 var task: Task { switch self { case .liveList: let param = ["t" : "\(Date().timeIntervalSince1970)"] return .requestCompositeData(bodyData: Data(), urlParameters: param) } } // 暂时不知道干啥的 var sampleData: Data { switch self { default: return Data() } } //这个应该是请求的类型头 var headers: [String: String]? { return ["Content-type": "application/json"] } } //MARK: - Helpers private extension String { var urlEscaped: String { return addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)! } var utf8Encoded: Data { return data(using: .utf8)! } } extension Task { static func json(_ parameters: [String: Any]) -> Task { return .requestParameters( parameters: parameters, encoding: JSONEncoding.default ) } } 这是NetService的扩展,你也可以写在一个文件中。不过,为了区分,就把网络请求名称列表和公共“实现”部分分开了写。 API.swift // // API.swift // IJKPlayerDemo // // Created by iOS on 2018/5/28. // Copyright © 2018年 weiman. All rights reserved. // import UIKit import Moya let provider = MoyaProvider<NetService>() 这样,基本的网络请求基础部分已经搭建完了,剩下的就是使用了。 三、开始请求 我在这里又新建了一个用于网络请求的文件:LoadDataHelper // // LoadDataHelper.swift // IJKPlayerDemo // // Created by iOS on 2018/5/28. // Copyright © 2018年 weiman. All rights reserved. // import UIKit import Moya enum LoadDataHelper { static func loadData(success: @escaping (_ data: Data) -> Void) { provider.request(.liveList) { (result) in switch result { case .success(let value): do { let data = value.data let dataAsJSON = try JSONSerialization.jsonObject(with: data) let prettyData = try JSONSerialization.data(withJSONObject: dataAsJSON, options: .prettyPrinted) success(prettyData) } catch { } case .failure(let error): print("--请求失败-- \(error)") } } } } 四、vc中使用 // // ViewController.swift // IJKPlayerDemo // // Created by iOS on 2018/5/28. // Copyright © 2018年 weiman. All rights reserved. // import UIKit import Foundation import IJKMediaFramework class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() loadData() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func loadData() { LoadDataHelper.loadData { (data) in do { let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) print("--------- \(json)") } catch { } } } } 结果截取部分: image.png

优秀的个人博客,低调大师

CNKI知网论文下载工具

之前提到过,可以通过图书馆(大连图书馆办理图书证就可以)的网站访问下载知网的论文。 最近遇到个神器,可以更方便的下载cnki知网的论文。 不多说,直接上下载链接。 链接: https://pan.baidu.com/s/1pMfi6BD 密码: yjkb 下面说说怎么用。 解压,双击运行,出现如下cmd命令框。按照提示来就行, 这里假设我想找“Python”相关的论文,就输入Python。 选择是作者还是摘要还是题目还是只是个关键字? 这里选择标题含有Python的论文,如下,可以翻页显示的。 好啦,下载完成了。 文件完整,可以正常打开。 如果觉得有帮助,点个赞就行了。作为一个持续分享的动力。 ​ 欢迎关注如下微信公众号,获取更多历史文章。

优秀的个人博客,低调大师

JavaUtil_06_DES加解密工具

一、示例 CommonUtil.java package com.ray.test.des; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class CommonUtil { public static void main(String[] args) { byte[] before=new byte[] {80, 75, 3, 4, 10, 60, 82, -83, 68, 8, 0, 28, 0, 80, 97, 121, 108, 108}; String mes=getStringFromBytes(before); byte[] after=getBytesFromString( mes); System.out.println("before= "+Arrays.toString(before)); System.out.println("after = "+Arrays.toString(after)); } public static String getStringFromBytes( byte[] before ) { BASE64Encoder enc=new BASE64Encoder(); String mes=enc.encodeBuffer(before); //使用BASE64编码 return mes; } public static byte[] getBytesFromString( String mes) { BASE64Decoder dec=new BASE64Decoder(); byte[]after=null; try { after =dec.decodeBuffer(mes);//使用BASE64解码 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return after; } } View Code DESTest.java package com.ray.test.des; import java.io.IOException; import java.security.SecureRandom; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * DESTest.java * * @author Techzero * @Email techzero@163.com * @Time 2013-12-12 下午2:22:58 */ public class DESTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String content = "wzm"; // 密码长度必须是8的倍数 String password = "12345678"; System.out.println("密 钥:" + password); System.out.println("加密前:" + content); //1.加密 byte[] result = encrypt(content, password); System.out.println("result length:" + result.length); System.out.println("加密后:" + Arrays.toString(result)); //2.解密 String decryResult = decrypt(result, password); System.out.println("解密后:" + decryResult); //3.将字节转String String mes=CommonUtil.getStringFromBytes(result); System.out.println("mes:" + mes); //4.将String转字节 byte[] after=CommonUtil.getBytesFromString(mes); String decryResultString =decrypt(after, password); System.out.println("decryResultString解密后:" + decryResultString); } /** * 加密 * * @param content * 待加密内容 * @param key * 加密的密钥 * @return */ public static byte[] encrypt(String content, String key) { try { SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, securekey, random); byte[] result = cipher.doFinal(content.getBytes()); return result; } catch (Throwable e) { e.printStackTrace(); } return null; } /** * 解密 * * @param content * 待解密内容 * @param key * 解密的密钥 * @return */ public static String decrypt(byte[] content, String key) { try { SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, securekey, random); byte[] result = cipher.doFinal(content); return new String(result); } catch (Throwable e) { e.printStackTrace(); } return null; } } View Code 二、参考资料 1.Java DES 加密 解密 示例

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册