精华内容
下载资源
问答
  • 在定子绕组旋转磁场的作用下,其在电枢鼠笼式铝框中电流通过并受磁场的作用而使其转动。这些机器中有些类型可作电动机用,也可作发电机用。它是将电能转变为机械能的一种机器。通常电动机的作功部分作旋转运动,...

    电动机

            电动机是一种旋转式电动机器,它将电能转变为机械能,它主要包括一个用以产生磁场的电磁铁绕组或分布的定子绕组和一个旋转电枢或转子。在定子绕组旋转磁场的作用下,其在电枢鼠笼式铝框中有电流通过并受磁场的作用而使其转动。这些机器中有些类型可作电动机用,也可作发电机用。它是将电能转变为机械能的一种机器。通常电动机的作功部分作旋转运动,这种电动机称为转子电动机;也有作直线运动的,称为直线电动机。

    右手螺旋定则(安培定则):用右手握住通电螺线管,让四指指向电流的方向,那么大拇指所指的那一端是通电螺线管的N极。

     

    线圈通电后,转子中的电流与气隙中的磁场发生相互作用,换向器不断改变线圈电流方向,作用在线圈的磁场力推动转子旋转:

     

    电动机工作原理:

    直流电机的设计中,如果采用两个线圈(两极),在静止状态时,线圈与磁场平衡,线圈产生的转动力矩无法克服磁场的阻力,转动不起来,除非使用外力破坏这种平衡。所以通常不采用偶数个电极,主要还是启动方面的考虑:

     

     

    电动机的分类

    按工作电源分类可分为直流电动机和交流电动机。其中交流电动机还分为单相电动机和三相电动机。

    按结构及工作原理分类可分为直流电动机,异步电动机和同步电动机。

    同步电动机还可分为永磁同步电动机、磁阻同步电动机和磁滞同布电动机。

    异步电动机可分为感应电动机和交流换向器电动机。感应电动机又分为三相异步电动机、单相异步电动机和罩极异步电动机等。交流换向器电动机又分为单相串励电动机、交直流两用电动机和推斥电动机。

    直流电动机按结构及工作原理可分为无刷直流电动机和有刷直流电动机。有刷直流电动机可分为永磁直流电动机和电磁直流电动机。电磁直流电动机又分为串励直流电动机、并励直流电动机、他励直流电动机和复励直流电动机。永磁直流电动机又分为稀土永磁直流电动机、铁氧体永磁直流电动机和铝镍钴永磁直流电动机。

    按起动与运行方式分类 电动机按起动与运行方式可分为电容起动式单相异步电动机、电容运转式单相异步电动机、电容起动运转式单相异步电动机和分相式单相异步电动机。

    按用途分类 电动机按用途可分为驱动用电动机和控制用电动机。

    驱动用电动机又分为电动工具(包括钻孔、抛光、磨光、开槽、切割、扩孔等工具)用电动机、家电(包括洗衣机、电风扇、电冰箱、空调器、录音机、录像机、影碟机、吸尘器、照相机、电吹风、电动剃须刀等)用电动机及其它通用小型机械设备(包括各种小型机床、小型机械、医疗器械、电子仪器等)用电动机。

    控制用电动机又分为步进电动机和伺服电动机等。

    按转子的结构分类 电动机按转子的结构可分为笼型感应电动机(旧标准称为鼠笼型异步电动机)和绕线转子感应电动机(旧标准称为绕线型异步电动机)。

    按运转速度分类 电动机按运转速度可分为高速电动机、低速电动机、恒速电动机、调速电动机。

    永磁电机

     

    直流电动机

     

    量子磁电机

     

    单相感应电动机

     

    步进电机的工作原理

     

    平衡电机

     

    产生电流的原理

     

    三相定子

     

    电动小马达

     

    电机剖视

     

     

     

    电动机

     

     

    三相异步电机好坏判别

    兆欧表 ;可用于电机相间和相对地间的绝缘电阻测量,并且不可小于0.5兆欧.

    万用表;用于检查电机·线圈通断的测量.

    单臂电桥 ;精确测量线圈电阻,可以知道每相线圈的电阻是否接近,特别是对重新绕制后.

     

    展开全文
  • 祝融可能“鸿蒙”上火星吗?

    万次阅读 多人点赞 2021-05-22 10:03:39
    祝融可能“鸿蒙”上火星吗? 2021年5月15日上午,天问一号着陆器确认成功降落火星北半球的乌托邦平原。“天问一号”一次任务同时实施环绕探测和巡视探测,在国际上尚属首次。之前成功全世界登陆火星的着陆器和...

     

    2021年5月15日上午,天问一号着陆器确认成功降落火星北半球的乌托邦平原。“天问一号”一次任务同时实施环绕探测和巡视探测,在国际上尚属首次。之前成功全世界登陆火星的着陆器和火星车加在一起只有10个,目前还在服役的火星探测车有“好奇号”、“洞察号”和“毅力号”,它们的探测区域基本都是在火星南部高地,而“天问一号”火星车着陆在火星北部平原,将会对人类全面理解火星的演化进程做出重要补充。2021年5月19日,祝融号火星车拍摄的影像。图像中,着陆平台和“祝融号”火星车的驶离坡道、太阳翼、天线等机构展开正常到位。

     

    天问的成功无疑是我国科技综合实力的体现,其背后包括航天测控、太阳能电池、航天动力以及IT技术等等共同协作的系统性工程,下面为各位读者进行一下详尽解读。

    天问有可能带鸿蒙上天吗

    前几天比特币、狗狗币之所以大火完全是因为马斯克发的推特上有一个狗狗的照片,知乎上有一个特别火的问题是《祝融火星车上有没有可能搭载鸿蒙OS或者RT-Thread》不过笔者认为鸿蒙上火星的可能性几乎为0,从鸿蒙的架构图中可以看到,

     

     

    鸿蒙的设计理念是保证良好的用户体验,让用户用得爽。

    而从论文《空间站有效载荷综合处理单元设计研究》可以看到载人航天系统的功能架构图如下:

     

    而对比鸿蒙可以看出航天操作系统需要首先保证系统的高可用性,系统健康、电源、遥测管理等等方面,至于多媒体、分布式等等方面根本就不用考虑。

    虽然并没有公开资料显示天问和祝融到底使用的是什么操作系统,但是笔者认为Space OS的可能性要超过90%。Space OS中国航天科技集团公司五院的航空天器操作系统,在2006年首飞成功,2013年嫦娥三号探月任务使用的是第二代的Space OS 2。

     

    尽管与普通家用的操作系统设计原理相似,但航空航天的操作系统为了适应恶劣太空环境,对安全性、可靠性等要求要苛刻许多。日常我们家用的计算机系统死机可以重启解决,坏件可以换新的,但飞行器上了天以后,根本就没有什么重启换件的机会。而且作为整个航天器的大脑,航天操作系统的连续运行时间绝不能拉胯,一般来说电池背板的使用寿命可达十几年,这也就意味着Space OS也得保证运行十几年不出现问题。正是由于对稳定性的要求极其苛刻,其实航天器一般是尽可能不引入操作系统的,不过随着像祝融这种需要同时处理几十个任务的火星车,没有操作系统的调度肯定是运行不下去。这也使得Space OS 与日常我们所接触到的操作系统的设计要求也不同,这里值得一提的是,在任务调度和内存管理方面,2013年搭建在嫦娥三号的SpaceOS 2可以同时做到同时管理几十个任务,与一代Space OS的5个任务相比提高不小,相信现在用于祝融的版本可能提升更大。在探测车在星球行走时,要一边不停地拍摄周围环境,一边快速保存和处理这些信息。同时还要密切注意外界传感器的反馈,假如前方遇到路障,需要操作系统在最短的时间内作出判断并反应,这在火星车电源和算力均有限的情况下做到硬实时还是非常不易的。

     

    能上天的芯片可不是一块没有故事的SOC

    根据奥姆剃刀如无必要勿增实体的原则,航天器上的芯片是越少越好,因此与我们家用电脑将内存、CPU、网卡分成不同模块的策略不同,航天芯片更倾向于完整的片内集成。根据论文《空间站有效载荷综合处理单元设计研究》,integrated processing unit(IPU)的架构如下:

     

     

    这款芯片实际是将内存、光纤RapidIO等外设以及CPU、FPGA等核心组件完全集成到一块芯片上了。

     

    由于想要内存、电子器件、半导体在没有大气层保护的强辐射环境下运行,就是一件极其困难的任务。因此航空航天器专属芯片的研发一般是比较耗时的,目前我国比较成熟的方案是轩宇空间的CPU-SoC 20xx系列的,其中第一代SoC 2008首次应用于2012年10月发射的实践-9B卫星星载计算机的主份核心芯片,是国内第一款在轨飞行的SoC芯片。该芯片基于SPARC V8体系结构,面向空间应用的高性能、低功耗的32位抗辐射片上系统芯片,计算性能超过86MIPS@100MHz。

     

    第二代产品SoC2012是一款4核CPU处理器,内部集成四个SPARC V8内核,性能超过了300MIPS 80FLOPS@100MHz,功耗不大于2瓦,基于SoC2012设计的新一代抗辐射加固星载计算机,其体积、重量和功耗只有同类传统星载计算机产品的一半,性能是现有产品的20~60倍,可以满足卫星对高性能、高可靠、小型化的进一步需求。截至2016年年底, 共有 200套以上 SoC2012 片上系统用于二代导航卫星、探月卫星等的控制计算机、敏感器等电子产品中。

     

    第三代产品是SoC2016芯片是一款异构多核芯片,除了集成SPARC V8架构高性能LEON4处理器核以外,还在片内集成了DSP数字信号处理器、浮点处理器、1553B总线、CAN总线、SpaceWire总线、DMA控制器等模块,SoC2016计算性能超过800MIPS 200MFLOPS@200MHz,功耗不大于3瓦,性能指标达到国际先进水平。

     

    当然轩宇空间自身也提供了一些SiP也就是微系统产品,比如SiP2113型通用星载计算机模块,就在SoC 2008的基础上集成了内存、Flash和1553B总线等模块,提供一体化解决方案。

    强化学习RL才能上天

    在2019软件定义卫星高峰论坛上中国科学院院士、中国探月工程首任首席科学家欧阳自远表示“嫦娥五号仍采用软着陆。这实际上是人工智能的自主决策。”其实火星和月球探测车并无本质区别,都需要解决探测车的着路与航线控制等问题。

     

    如果超远距离的通讯,通讯延时过长几乎是一种必然会遇到的问题,如果探测车所有动作完全依靠遥控的话可能会有一定的潜在问题,而用欧阳自远院士的话讲,“它一直在边走边找,最后作出判断和决策。”这其实是向我们说明了星球探测科技的背后应该是强化学习。

     

    我们知道在目前人工智能领域分为深度学习模型和强化学习模型两种流派。其中深度学习模型以深度神经网络模型为主,在图像及自然语言识别、分类以及生成等方面都有不错的成绩。而强化学习从目前公开的资料来看,当属GPT-3之父Open AI的实力比较强。深度学习比较合适根据海量的数据推测数据之间规律和关联,而强化学习主要用于探索未知领域,所以由本次天问和祝融要执行的火星探测任务来看,由于火星表面的数据匮乏,使用深度学习的可能微乎其微,如果有AI技术的应用也几乎可以肯定应该是强化学习的模型。

          

     强化学习(reinforcement learning,RL)技术,要做是一系列基于时间序列的决策。它先假定每个问题都对应一个Environment,这时每一个Agent在Environment中采取的每一步动作都是一个Action,做出Action之后,Agent从Environment中得到observation与reward,再不断循环这个过程,以达到总体reward最大化。 其原理图如下:

     

     

    所以从RL的原理中也能看出,RL是一种在不确定且复杂的环境中通过不断试错,并根据反馈不断调整策略,最终完成目标的AI, 目前虽然RL的应用还不如深度学习那样普遍,但是在一些具体的场景中例如,控制步进马达、电子竞技方面还是取得了不错的成绩,强化学习的确是比较适合在由机器自主实现某些目标。

     

     

     

     

    这和天问和祝融的火星任务非常的契合。因此笔者预测祝融探测车上应用初步强化学习成果的可能不低。

     

      

     

    展开全文
  • 关于三度和六度

    2020-02-18 11:14:29
    (1)6度带一共11个(13号—23号),各中央经线依次为(75°、81°、......、123°、129°、135°); (2)3度带一共22 个(24号—45号),各中央经线依次为(72°、75°、......、132°、135...

    坐标系三度带和六度带的区分

     

    0.我国的经度范围西起 73°东至135°,可分成:
        (1)6度带一共11个(13号带—23号带),各带中央经线依次为(75°、81°、......、123°、129°、135°);
        (2)3度带一共22 个(24号带—45号带),各带中央经线依次为(72°、75°、......、132°、135°);
    六度带中央经线经度的计算:当地中央经线经度=6°×当地带号-3°,例如:地形图上的横坐标为20345,其所处的六度带的中央经线经度为:6°×20-3°=117°(适用于1∶2.5万和1∶5万地形图)。
    三度带中央经线经度的计算:中央经线经度=3°×当地带号(适用于1∶1万地形图)。


    1、我国采用6度带和3度带分带:
         (1) 1:2.5万及1:5万的地形图采用6度分带投影,即经差为6度,从零度子午线开始,自西向东每隔经差6度为一投影带,全球共分60个带,用1,2,3,4,5......表示,即东经0~6度为第一带,其中央经线的经度为东经3度;东经6~12度为第二带,其中央经线的经度为9度。
         (2)1:1万的地形图采用3度带分带,从东经1.5度的经线开始,每隔3度为一带 ,用1,2,3......表示,全球共划分120个投影带,即东经1.5~4.5为第一带,其中央经线的经度为东经3度带,东经4.5~7.5度为第二带,其中央经线的经度为东经6度。
    地形图上公里网横坐标前2位就是带号,例如:1:5万地形图上的横坐标为18576000,其中18即为带号,293300为纵坐标值。


    2、当地中央经线经度的计算
         (1) 6度带中央经线经度的计算:当地中央经线经度=6°×当地带号-3°;
    例如:地图上的横坐标为18576000,其所处的6度带的中央经线经度为:6°×18-3°=105°;
          (2)3度带中央经线经度的计算:中央经线经度=3°×当地带号。


       一个好记的方法:在中华人民共和国陆地范围内,坐标(Y坐标,8位数,前两位是带号)带号小于等于23的肯定是6度带,大于等于24的肯定是3度带。

    3、只知道经纬度时中央经线的计算:
       (1)6度带:将当地经线的整数部分除以6,再取商的整数部分加上1,再将所得结果乘以6后减去3°,就可以得到当地的中央经线值。如:106°15′00″,即用106°/6取整得17°,(17°+1)×6-3°=105°,即当地的中央经线值为105°.
       (2)3度带:将当地经线的整数部分除以3,整数后面的数值四舍五入。
    如:97°11′00″,即用97°/3=32.33,四舍五入后取得32
          
    4.当地中央子午线和3/6度带投影公式推算:

          当地中央子午线决定于当地的直角坐标系统,首先确定您的直角坐标系统是3度带还是6度带投影公式推算:
       (1)6度带中央子午线计算公式

          当地经度/6=N;中央子午线L=6 ×N(带号),当没有除尽,N有余数时,中央子午线L=6×N- 3
       (2)3度带中央子午线计算公式

          当地经度/3=N;中央子午线L=3× N


    我国的经度范围西起73度带东至135度带,可分为6度带十一带,见下表:

    6度投影分带号     (单位:)   

     左侧经线经度(单位:度)   

     中央经线经度(单位:度)   

    右侧经线经度(单位:度)   

    13 

    72 

    75

    78

    14

    78 

     81

    84

    15

    84 

    87

    90

    16

    90

    93

    96

    17

    96

    99

    102

    18

    102

    105

    108

    19

    108

    111

    114

    20

    114

    117

    120

    21

    120

    123

    126

    22

    126

    129

    132

    23

    132

    125

    138

    我国的经度范围西起73度东至135度,可分成3度带二十二度,见下表:

    3度投影分带号(单位:) 左侧经线经度(单位:度) 中央经线经度(单位:度) 右侧经线经度(单位:度)
    24 70.5 72 .5
    25 73.5 75 76.5
    26 76.5 78 79.5
    27 79.5 81 82.5
    28 82.5 84 85.5
    29 85.5 87 88.5
    30 88.5 90 91.5
    31 91.5 93 94.5
    32 94.5 96 97.5
    33 97.5 99 100.5
    34 100.5 102 103.5
    35 103.5 105 106.5
    36 106.5 108 109.5
    37 109.5 111 112.5
    38 112.5 114 115.5
    39 115.5 117 118.5
    40 118.5 120 121.5
    41 121.5 123 124.5
    42 124.5 126 127.5
    43 127.5 129 130.5
    44 130.5 132 133.5
    45 133.5 135 136.5
    展开全文
  • Java带有验证码的模拟登陆

    千次阅读 2018-03-14 15:33:57
    一共两个网页,其中没有验证码的网页比较...但是另一个带有验证码(图片)却总是登陆失败。代码:获取识别后的验证码public class AliYun { private static Logger logger = Logger.getLogger(AliYun.class);  ...
    • 需求:

            最近得到一个需求,需要模拟登陆网页,然后通过网页接口获取相应数据。一共两个网页,其中没有验证码的网页比较容易的模拟登陆成功。但是另一个带有验证码(图片)却总是登陆失败。

    • 代码:
    获取识别后的验证码
    public class AliYun {
        private static Logger logger = Logger.getLogger(AliYun.class);
        //    通过图片请求地址   获取图片Base64编码
        public static String getImageStrFromUrl(String imgURL) {
            byte[] data = null;
            InputStream inStream = null;
            try {
                // 创建URL
                URL url = new URL(imgURL);
                // 创建链接       (注意:稍后更改代码在这一部分)
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5 * 1000);
                inStream = conn.getInputStream();
                BufferedImage src = ImageIO.read(inStream);
                File file = new File("D:\\temp.jpg");
                ImageIO.write(src, "jpg", file);
                InputStream inputStream = new FileInputStream(file);
                data = new byte[inputStream.available()];
                inputStream.read(data);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    inStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回Base64编码过的字节数组字符串
            return encoder.encode(data);
        }
    
    
        //    获取识别后的验证码
        public static String getLoginCode(String imgPath) {
            String baseImg = getImageStrFromUrl(imgPath);//base64转换
            baseImg = baseImg.replaceAll("\\r\\n", "");
            String host = "http://jisuyzmsb.market.alicloudapi.com";
            String path = "/captcha/recognize";
            String appcode = "你购买接口之后的Code";
            Map<String, String> bodys = new HashMap<String, String>();
            bodys.put("pic", baseImg);
    
            HttpRequest request = HttpRequest.post(host + path + "?type=en4", bodys, true).header("Authorization", "APPCODE " + appcode).header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            String result = request.body();
            logger.debug("阿里云接口识别结果:" + result);
            JSONObject jsonObject = JSON.parseObject(result);
            if (jsonObject.containsKey("status") && jsonObject.getString("status").equals("0")) {
                //识别正确  {"status":"0","msg":"ok","result":{"type":"en4","code":"5sfw"}}
                JSONObject rs = jsonObject.getJSONObject("result");
                return rs.getString("code");
            } else if (jsonObject.containsKey("status") && jsonObject.getString("status").equals("210")) {
                //识别错误  {"status":"210","msg":"未知错误","result":""}
                logger.error("阿里云接口识别失败:" + result);
            }
            return null;
        }
    }

    //模拟登陆

    private void login() {
            //获取验证码      (1)通过调用上面AliYun方法获取到   识别图片之后的验证码  
            String vldcode = AliYun.getLoginCode(loginConfig.getUrl() + LoginConfig.CODE_URL);   //  验证码图片的URL
            //登录     (2)用户名和密码 再携带上验证码  模拟登陆
            String url = loginConfig.getUrl() + LoginConfig.LOGIN_URL.replace("{username}", loginConfig.getUsername()).replace("{password}", loginConfig.getPassword()).replace("{vldcode}", vldcode);
            HttpRequest request = HttpRequest.get(url);
            //获取登录后的数据
            Map<String, List<String>> headers = request.headers();
            List<String> cookies = headers.get("Set-Cookie");     //   (3)获取Cookie
            if (null != cookies && cookies.size() > 0) {
                String cookie = cookies.get(0).split(";")[0];
                String key = RedisKeyList.getLoginSessionId();
                Jedis jedis = RedisClient.getJedis();
                try {
                    jedis.set(key, cookie);    //  (4)存入Redis
                } catch (Exception ignored) {
                } finally {
                    RedisClient.returnResource(jedis);
                }
            }
    
        }
    //    携带有识别前验证码(图片)base64编码    识别之后的验证码    cookie   
    public void 获取数据(){
    
    //使用过程  伪代码
    //如果Redis 中 SeesionId(Cookie获取的值)为空
    if (Redis.getLoginSessionId == null) {
        //重新登陆
        login();
    }
    ...
    ...
    //请求接口,获取数据
    if (数据获取失败) {
        //意味着登陆已过期,把Redis存的值清空
        loginConfig.cleanSessionId();
        获取数据();//再次调用获取数据
        return null;
    }
    }

    • 思路:

        (1)通过图片URL获取图片,调用阿里市场购买的接口,识别图片,获取验证码

    (https://market.aliyun.com/products/57126001/cmapi014396.html#sku=yuncode839600006)阿里市场

        (2)模拟登陆,并将Cookie存入Redis, 以后的数据获取只需要携带Cookie即可

        (3)当Cookie过期(其他人登陆网站,因为是管理网站,其他人登陆的情况少),重新获取

    • 分析:

         但是,以上代码总是出现错误,Cookie总是不正确的。

        (1)在分析登陆之后,我怀疑是 通过获取URL获取图片验证码时,与(用户名,密码,验证码)时是不同的,也就是说,我每次模拟登陆时使用的验证码总是过期的。

        (2)于是思考之后,得到新思路:

    1. 请求图片URL,识别图片获取验证码,保存此次请求的imgCookie.
    2. 模拟登陆  (用户名 密码  验证码) 并携带imgCookie.
    • 新思路代码:
    用于携带 验证码base64编码  验证码   cookie   的DTO
    public class CookieAndCodeDTO extends BaseDTO {
    
        //  识别前 验证码base64编码
        private String base64;
        //  识别后 验证码
        private String code;
        //cookie
        private String cookie;
    
        public String getBase64() {
            return base64;
        }
    
        public void setBase64(String base64) {
            this.base64 = base64;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getCookie() {
            return cookie;
        }
    
        public void setCookie(String cookie) {
            this.cookie = cookie;
        }
    }
    
    // 图片识别以及携带Cookie
    /**
     * Created by Administrator on 2018-2-1.
     */
    public class AliYun {
        private static Logger logger = Logger.getLogger(AliYun.class);
    
        /**
         * Base64编码   解码
         * @param imgURL 验证码(图片)请求路径
         * @return  CookieAndCodeDTO  (携带Cookie 和 验证码Base64编码)
         */
        public static CookieAndCodeDTO getImageStrFromUrl(String imgURL) {
            byte[] data = null;
            InputStream inStream = null;
            CookieAndCodeDTO cookieAndCodeDTO = new CookieAndCodeDTO();
            try {
                // 创建URL
                URL url = new URL(imgURL);
                // 创建链接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5 * 1000);
                //创建传输对象
                Map<String,List<String>> headers=conn.getHeaderFields();
                List<String> cookies = headers.get("Set-Cookie");
                if (null != cookies && cookies.size() > 0) {
                    //获取图片时的Cookie
                    String cookie = cookies.get(0).split(";")[0];
                    cookieAndCodeDTO.setCookie(cookie);
                }
                inStream = conn.getInputStream();
                BufferedImage src = ImageIO.read(inStream);
                File file = new File("D:\\temp.jpg");
                ImageIO.write(src, "jpg", file);
                InputStream inputStream = new FileInputStream(file);
                data = new byte[inputStream.available()];
                inputStream.read(data);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    inStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回Base64编码过的字节数组字符串
            cookieAndCodeDTO.setBase64(encoder.encode(data));
            return cookieAndCodeDTO;
        }
    
        /**
         * 识别验证码(图片)
         * @param imgPath   验证码(图片)请求路径
         * @return CookieAndCodeDTO  (携带Cookie 和 验证码)
         */
        public static CookieAndCodeDTO getLoginCode(String imgPath) {
            CookieAndCodeDTO cookieAndCodeDTO = getImageStrFromUrl(imgPath);
            String baseImg = cookieAndCodeDTO.getBase64();//base64转换
            baseImg = baseImg.replaceAll("\\r\\n", "");
            String host = "http://jisuyzmsb.market.alicloudapi.com";
            String path = "/captcha/recognize";
            String appcode = "你购买接口之后的CODE";
            Map<String, String> bodys = new HashMap<String, String>();
            bodys.put("pic", baseImg);
    
            HttpRequest request = HttpRequest.post(host + path + "?type=en4", bodys, true).header("Authorization", "APPCODE " + appcode).header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            String result = request.body();
            logger.debug("阿里云接口识别结果:" + result);
    
            // result  出现过格式异常的情况
            JSONObject jsonObject = JSON.parseObject(result);
            if (jsonObject.containsKey("status") && jsonObject.getString("status").equals("0")) {
                //识别正确  {"status":"0","msg":"ok","result":{"type":"en4","code":"5sfw"}}
                JSONObject rs = jsonObject.getJSONObject("result");
                cookieAndCodeDTO.setCode(rs.getString("code"));
                return cookieAndCodeDTO;
            } else if (jsonObject.containsKey("status") && jsonObject.getString("status").equals("210")) {
                //识别错误  {"status":"210","msg":"未知错误","result":""}
                logger.error("阿里云接口识别失败:" + result);
            }
            return null;
        }
    }
    
    //模拟登陆 并保存Cookie
    private void login() {
    
            CookieAndCodeDTO cookieAndCodeDTO = AliYun.getLoginCode(LoginConfig.getUrl() + LoginConfig.CODE_URL); //(1)获取 Cookie 和 验证码
            assert cookieAndCodeDTO != null;
    
            String vldcode = cookieAndCodeDTO.getCode();
    
            assert vldcode != null;
          
            String url = loginConfig.getUrl() + LoginConfig.LOGIN_URL.replace("{username}", loginConfig.getUsername()).replace("{password}", loginConfig.getPassword()).replace("{vldcode}", vldcode);
    
            //  (2) 模拟登陆  携带Cookie
            HttpRequest request = HttpRequest.get(url).header("Cookie", cookieAndCodeDTO.getCookie());
    
            //   (3) 保存Cookie
            if (null != cookieAndCodeDTO.getCookie()) {
                String key = RedisKeyList.getLoginSessionId();
                Jedis jedis = RedisClient.getJedis();
                try {
                    if (jedis != null) {
                        jedis.set(key, cookieAndCodeDTO.getCookie());
                    }
                } catch (Exception ignored) {
                } finally {
                    RedisClient.returnResource(jedis);
                }
            }
    
        }
    • 结果:

    伪代码同上。

    运行成功。(代码有许多不完善的地方,解释也可能不是很准确,如果有知道的可以留言)

    展开全文
  • 如果方法既包含参数,又带有返回值,我们称为返回值的方法。例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 String 类型的结果应用举例:import java.util.Arrays;public ...
  • 关于带有静态成员的类,在Java中,一般情况下,静态属性一般用来表示常驻内存的数据,比如常量,静态方法我们一般用来实现一些共有的方法,而且这些方法一般实现的功能都是固定不变的。关于Singleton的实现方法,...
  • 输入9位整数或以下可以小数点后面两位一共11位数 像1.111这样是不成功的 999999999.22这样是可以的 求正则表达式 (表达不清楚 在线等答案.....)
  • WPF 控件库——带有惯性的ScrollViewer

    千次阅读 2018-09-05 11:10:57
    一、先看看效果   ... 本质上我们只要接管ScrollViewer的滚动逻辑,并且把这个逻辑替换成带有惯性的即可,那么如何去接管呢?这里的关键是先屏蔽ScrollViewer的鼠标滚轮事件: 1 protected ov...
  • 42-参数的信号

    千次阅读 2016-12-27 11:58:50
    实际上,我们也可以使用参数的的信号处理函数。signal 函数没办法注册一个附加参数的信号处理函数,但是 sigaction 可以。具体是通过 sigaction 的第二个参数 struct sigaction 结构体来指定
  • 今天在做项目的时候遇到了一个问题,真的是有点神奇的问题。在进行数据查询的时候,实体类中带有下划线的字段查出来的结果都为null,由此可见就是mybatis的事情。
  • Java 中返回值方法的使用

    千次阅读 2016-04-24 10:59:11
    根据方法是否参数,是否返回值,将Java中的方法分为四类: 无参无返回值方法; 无参返回值方法; 参无返回值方法; 返回值方法; import java.util.Arrays; public class HelloWorld {  public ...
  •  1.GamePanel:游戏面板类,这个类里面实现了游戏逻辑的判断,比如音效应该在什么时候播放,坦克应该在什么时候检测碰撞,键盘事件的响应处理等等  2.LevelPanel:关卡面板类,这个类里面主要是处理游戏开始时...
  • 目前2种类型的二维码:1、临时二维码,是过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景2、永久...
  • python生成带有表格的图片

    万次阅读 2016-11-27 11:29:29
    刚开始的思路,是直接生成一个带有table标签的html文件,然后将这个文件转成图片,经过查找资料发现需要安装webkit2png,而这个库又依赖其他的东西,遂放弃。 当初的目标是直接生成一个图片,并且是只需要安装...
  • 前几天碰到一个问题,做到tab切换fragment,而fragment中带有listView。 看了几篇其他博主的文章,大致上说采用listfragment,单纯的fragment不能用自定义item的listview。 一开始我是相信的,采用了listfragment...
  • 不知不觉中,你一步步深入了解View系列的文章已经写到第四篇了,回顾一下,我们一共学习了LayoutInflater的原理分析、视图的绘制流程、视图的状态及重绘等知识,算是把View中很多重要的知识点都涉及到了。...
  • LVM条

    千次阅读 2017-10-11 15:17:52
    一般以LVM管理的存储,一个vg中可能会很多pv,同样的,一个lv可能跨越多块pv,为了使硬盘存储速度加快,就会用到条化的技术,即把连续的数据分成大小相同的数据块,然后依次存储在各个pv上。类似于RAID0,使存储...
  • 微信小程序生成参数的二维码

    万次阅读 2018-09-19 15:23:27
    先查看文档,共有三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口C https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html 详细的三个接口地址请...
  • STM32位区和位别名区的浅谈

    千次阅读 2020-03-03 12:33:26
    1.首先谈下为什么要使用位? 在学习51单片机时就已经使用过位操作,比如使用sbit对单片机IO口的定义,但是STM32中并没有这类关键字,而是通过访问位别名区来实现,即通过将每个比特位膨胀成一个32位字,当访问...
  • 那么本篇文章中,我们将继续对View进行深入探究,看一看它的绘制流程到底是什么样的。如果你还没有看过我的上一篇文章,可以先去阅读 Android LayoutInflater原理分析,你一步步深入了解View(一) 。 相信每个...
  • 用css制作三角矩形

    千次阅读 2015-06-17 19:21:33
    在网页中通常会见到一种三角的矩形框,常见于注释或者弹框提示。在百度2015校园招聘的笔试题目中也一道题目要求...css盒子模型同一方向共有四个属性,比如横向margin,border,padding,width。其中width指定内容
  • System.out.println("共有"+count+"个成绩信息!"); } //写一个排序方法 public int sort(int []scores){ Arrays.sort(scores); System.out.println(Arrays.toString(scores)); //返回数组中元素的...
  • 一文你轻松掌握多种编程范式

    万次阅读 多人点赞 2020-12-14 14:15:45
    编程范式多种,主要结构化的程序设计思想、对于对象的程序设计思想、面向对象的程序设计思想、基于接口的程序设计思想。那么这些范式各是什么意思呢?别着急,我们通过一个加法器的例子来逐一说明。 结构化程序...
  • 万字HBase详解你畅游大数据的海豚湾

    万次阅读 多人点赞 2020-05-20 17:18:25
    本文深入到HBase的起源开始分析,从0开始你畅游大数据的海豚湾!让你轻松掌握HBase的原理,架构设计,存储设计,优点及适用场景。
  • python3插入mysql时内容带有引号

    千次阅读 2017-09-21 16:42:58
    插入mysql时,如果内容中引号等特殊符号,会报错,解决方法可以用反斜杠转义,还可以用pymysql的一个方法自动转义:c = ''' 北京时间9月20日晚间9点半,智能供应链服务供应商百世集团将在(2125973432,'tech',this...
  • 你理解beta分布

    万次阅读 多人点赞 2016-09-17 15:08:17
    相信大家学过统计学的都对 正态分布 二项分布 均匀分布 等等很熟悉了,但是却鲜少有人去介绍beta分布的。用一句话来说,beta分布可以看作一个概率...举一个简单的例子,熟悉棒球运动的都知道一个指标就是棒球击球率(b
  • 一 实例描述使用全局平均池化层来代替传统的全连接层,使用了3个卷积层的同卷积操作,滤波器为5*5,每个卷积层后面都会跟个步长为2*2的池化层,...通过一个带有全局平均池化层的卷积神经网络对CIFAR数据集分类。二 ...
  • 从服务器端你了解什么叫集成windows身份验证 大家也许看到一个帖子说把IE选项里的“启用集成Windows身份认证”就可以避免微软反盗版。那么这个集成Windows身份验证是不是就真的是微软反盗版的帮凶呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 290,315
精华内容 116,126
关键字:

一共有什么带