-
laravel-admin微信网页授权获取用户信息过程
2020-11-27 13:50:42第一步,安装 composer require "overtrue/laravel-wechat:~3.0 第二步,在config/app.php中添加两行代码 providers下添加 Overtrue\LaravelWeChat\ServiceProvider::class, aliases下添加 'EasyWeChat' =>...最近在重构我们平台得前端页面以及逻辑,再此记录一下微信网页版授权获取用户资料得过程
- 第一步,安装
composer require "overtrue/laravel-wechat:~3.0
- 第二步,在config/app.php中添加两行代码
providers下添加 Overtrue\LaravelWeChat\ServiceProvider::class, aliases下添加 'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
- 创建配置文件
php artisan vendor:publish
创建成功后进入config/wechat.php下配置公众号信息。如图:
可以在.env里去配置公众号信息- 项目中使用,上代码
use EasyWeChat\Factory; //1 public function index(Request $request) { //通过路由进入首先判断session是否有值 if(empty(session('userInfo'))){ //没有值去授权获取资料 $this->getUserInfo(); }else{ //有值就从session中获取值,进入页面 $userinfo = session('userInfo'); return view('index.HomeIndex',['data'=>$userinfo]); } } //3 获取code public static function getCode() { //获取公众号配置信息 $config = config('wechat.official_account.default'); $http = urlencode('http://xxxx.com/api/getUserInfo')//回调地址,处理获取微信用户信息 $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$config['app_id'].'&redirect_uri='. $http.'&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect'; header('location:'. $url); } // 4 通过code获取用户信息 public static function getCodeUser() { //这一步可以获取到微信用户信息 $config = config('wechat.official_account.default'); $app = Factory::officialAccount($config); $oauth = $app->oauth; $response = $oauth->user(); return $response; } //2 执行获取资料 public function getUserInfo() { //这里是回调地址,如果有code。地址是:http://xxx.com/h5/?code=011NRLFa1aRx3A0Mx9Ia1LSDn13NRLFs&state=STATE if(empty($_GET['code'])){ //code为空就去获取code,这一步会授权,在下面的方法成功执行后会再次回到此方法,所以要先判断code是否为空 self::getCode(); }else{ //已经授权,回调会走此方法,下面方法会获取用户资料 $userInfo = self::getCodeUser(); $data = User::getUser($userInfo);//执行添加用户信息并返回 return redirect("/api/Home-index"); } } // 存在就修改,不存在添加(用户) public static function getUser($data) { //获取本人信息,有就更新,没有就添加 $info = User::where('openid',$data['id'])->first(); if(empty($info)){ //添加 $userInfo['openid'] =$data['id']; $userInfo['avatar'] =$data['avatar']; $userInfo['name'] =$data['name']; User::create($userInfo); }else{ //修改 User::where('openid',$data['id'])->update(['avatar'=>$data['avatar'],'name'=>$data['name']]); } session(['userInfo'=>$info]);//存储到session return $data; }
因前端重构工程大,所以暂时搁置,代码没有测试完整,欢迎讨论。
-
微信开发第一步---与微信服务器建立通信
2019-12-10 22:37:35微信开发第一步—与微信服务器建立通信 前言:在项目开发过程中,有时会遇到需要进行微信公众号相关的开发,但是在开发的过程中,可能微信公众号相关的appid等信息尚未拿到,在这种情况下我们便可以使用微信测试...Java版–微信开发第一步—与微信服务器建立通信
前言:在项目开发过程中,有时会遇到需要进行微信公众号相关的开发,但是在开发的过程中,可能微信公众号相关的appid等信息尚未拿到,在这种情况下我们便可以使用微信测试号进行开发。
测试号获取链接:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login ,通过此链接,使用微信扫码即可获得我们需要的appid 以及appsecret
1.基本环境准备 —> 内网穿透
-
环境分析:(作者环境为win10 x64)
在进行微信相关开发的时候,由于微信相关开发需要和微信服务器进行通信,而我们的开发环境是在公司内网环境中,这种情况下我们需要用一些工具进行内网穿透,把本地开发环境映射到公网环境,这样就可以和微信服务器进行通信了。
-
具体步骤:
Step1 : 常见的内网穿透工具有很多,此时我们可以通过搜索引擎寻找合适的穿透工具进行操作。本文以natapp为例进行介绍。
Step2: 进入natapp官网 https://natapp.cn/ 购买隧道和二级域名(操作步骤参考此工具官网,此处不再赘述)
Step3: 购买完成后,进入 会员中心–> 我的隧道 可见如下界面
Step4: 点击配置进行相关配置,设置本地地址和本地端口如下所示
Step5: 下载客户端到本地 , 进入客户端所在的目录,运行cmd或者 powershell ,执行命令:
.\natapp.exe -authtoken=12345abcde 此处的authtoken的值为 上图中authtoken的值
Step6:
黑窗口运行成功的效果如下
微信服务器现在就可以和本地项目进行通信了。可以在浏览器测试是否可以通过域名访问本地资源,如下可以正常显示本地的一些资源证明配置完全可用。2. 编写基本代码 --> 实现与微信服务器建立连接
**1.知识扫盲:**通过阅读微信相关文档,我们可以发现,在和微信进行通信之前,需要先进行绑定操作,也就是告诉微信公众号, 你的服务器是你的服务器,这样微信才可以确定要和你的服务器进行通讯。
这里的url就是本地项目接口的路径,现在咱们还没有编写代码可以先空着。2.新建项目,导入依赖
在本地新建springboot项目,pom中必要的依赖如下
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> //这个依赖不是必要的依赖,可以简化代码,可以不使用 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
3.编写微信配置类
@Data //这是lombook注解,可以在编译时生成getter、setter、构造方法等代码 public class WxConstantConfig { public static final String appID = " ";//微信测试号页面生成 public static final String appSecret = " ";//微信测试号页面生成 public static final String token = "hello";//微信测试号页面的接口配置信息中配置的 Token public static final boolean safe = false; public static final String assessToken=""; }
4.编写WeixinUtil类
public class WeixinUtil { protected static Logger log = LoggerFactory.getLogger(WeixinUtil.class); public static boolean isCheck(HttpServletRequest request, String token) { String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); return SignUtil.checkSignature(token, signature, timestamp, nonce); } }
5.编写SignUtil类
public class SignUtil { private static final Logger log = LoggerFactory.getLogger(SignUtil.class); private static final char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; public static boolean checkSignature(String token, String signature, String timestamp, String nonce) { if (isBlank(token, signature, timestamp, nonce)) { return false; } else { String[] arr = new String[] { token, timestamp, nonce }; Arrays.sort(arr); StringBuilder sb = new StringBuilder(); for (String anArr : arr) { sb.append(anArr); } MessageDigest md; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); byte[] digest = md.digest(sb.toString().getBytes("UTF-8")); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { log.error("加密方式异常", e); } catch (UnsupportedEncodingException e) { log.error("编码格式不支持", e); } return tmpStr != null && tmpStr.equalsIgnoreCase(signature); } } }
6.编写service类
@Service @Slf4j public class WeixinBindService{ private static WxConfig wxconfig; { String token = WxConstantConfig.token; boolean issafe = WxConstantConfig.safe; String encodingaeskey = WxConstantConfig.encodingAESKey; String secret = WxConstantConfig.appSecret; String appid = WxConstantConfig.appID; wxconfig = new WxConfig(appid, secret, encodingaeskey, issafe, token); } public WxConfig getWxConfig() { return WeixinBindService.wxconfig; } }
7.编写action类
@RestController @Scope("prototype") @Slf4j @RequestMapping("api/") public class WeiXinMenuAction{ @Autowired private WeixinBindService wxService; @RequestMapping(value = "bind") public @ResponseBody String bind(HttpServletRequest request) { if (WeixinUtil.isCheck(request, wxService.getWxConfig().getToken())) { // 绑定微信服务器成功 String echostr = request.getParameter("echostr"); //此处如果log报红,需要安装lom插件,安装方法请百度,此处不再赘述 log.warn("bind weixin server success , and echostr is {}", echostr); return echostr; } else { // 绑定微信服务器失败 log.warn("bind weixin server faile !!!"); return ""; } } }
至此基本代码编写完成。
3.在测试号中测试本地项目与微信服务器的连接情况
配置本地 action 的路径以及 token
点击提交之后,提示配置成功,说明微信访问本地服务成功。
至此,万里长征的第一步就走完了。接下来就可以进行相关开发了。
-
-
移动GIS开发:第一步安卓地图定位功能的实现
2019-04-21 10:51:38一.目标 获取当前手机定位坐标信息(WGS84坐标系) 二.实现过程 1.在布局界面添加一个TextView一.目标
获取当前手机定位坐标信息(WGS84坐标系)
二.实现过程
1.在布局界面添加一个TextViewTextView android:id="@+id/location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在初始化..."
2.定义组件并通过id找到上述组件
private TextView text; //定义用于显示LocationProvider的TextView组件 text = (TextView) findViewById(R.id.location); //获取显示Location信息的TextView组件
3.获取系统的LocationManager对象,即位置信息管理员,从系统服务中获取
LocationManager locationManager =(LocationManager)getSystemService(LOCATION_SERVICE);
4.从从GPS获取最新的定位信息
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
5.定义一个方法locationUpdates,用来在文本框组件中更新位置信息
public void locationUpdates(Location location) { //获取指定的查询信息 //如果location不为空时 if (location != null) { StringBuilder stringBuilder = new StringBuilder(); //使用StringBuilder保存数据 //获取经度、纬度、等属性值 stringBuilder.append("您的位置信息:\n"); stringBuilder.append("经度:"); stringBuilder.append(location.getLongitude()); stringBuilder.append("\n纬度:"); stringBuilder.append(location.getLatitude()); // stringBuilder.append("\n精确度:"); // stringBuilder.append(location.getAccuracy()); // stringBuilder.append("\n高度:"); // stringBuilder.append(location.getAltitude()); // stringBuilder.append("\n方向:"); // stringBuilder.append(location.getBearing()); // stringBuilder.append("\n速度:"); // stringBuilder.append(location.getSpeed()); // stringBuilder.append("\n时间:"); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH mm ss"); //设置日期时间格式 // stringBuilder.append(dateFormat.format(new Date(location.getTime()))); text.setText(stringBuilder); //显示获取的信息 } else { //否则输出空信息 text.setText("没有获取到GPS信息"); } }
6.将最新的定位信息传递给创建的locationUpdates()方法中
locationUpdates(location);
7.设置LocationManager的requestLocationUpdates(获取位置信息方法)的参数,实现在一定时间间隔进行位置更新。
locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, //GPS定位提供者 1000, //更新数据时间为1秒 1, //位置间隔为1米 //位置监听器 new LocationListener() { //GPS定位信息发生改变时触发,用于更新位置信息 @Override public void onLocationChanged(Location location) { //GPS信息发生改变时,更新位置 locationUpdates(location); } @Override //位置状态发生改变时触发 public void onStatusChanged(String provider, int status, Bundle extras) { } @Override //定位提供者启动时触发 public void onProviderEnabled(String provider) { } @Override //定位提供者关闭时触发 public void onProviderDisabled(String provider) { } });
8.赋予app相应权限,在manifest中添加
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
9.在运行期间遇到的一个小bug在此记录,即中文字符乱码,在app文件夹目录里的build.gradle文件下添加
android{compileOptions.encoding="GBK"}
三.总结
获取位置总体流程
1)从系统服务中申请一个负责管理位置的管家(LocationManager对象)
2)从gps获取最新的坐标存到location对象
3)写一个方法(locationUpdates)将坐标信息更新到目标文本框
4)通知管家(LocationManager对象)每隔多久更新一次坐标信息,精度多少,即设置LocationManager的requestLocationUpdates(获取位置信息方法)的参数。 -
软件测试之最基础(测试小白的第一步)
2020-09-08 16:43:441.软件测试定义: 使用人工和自动手段来运行或测试...3)通过测试活动,获取被测对象的质量信息,为决策提供数据依据 4)通过测试活动,预防缺陷的产生,从而减低项目和产品的风险 5)通过测试活动,积累经验,为以后的1.软件测试定义:
使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别
2.什么是软件:
1)实现用户需求的源代码 2)与之相匹配的用户手册 3)支撑起软件运行的配置数据
3.软件测试的目的
1)发现被测对象与用户需求之间的差异—缺陷,bug,错误 2)通过测试活动,发现并解决缺陷 3)通过测试活动,获取被测对象的质量信息,为决策提供数据依据 4)通过测试活动,预防缺陷的产生,从而减低项目和产品的风险 5)通过测试活动,积累经验,为以后的类似的产品开发提供经验
4.软件测试的原则:
1)所有测试追溯到用户需求 2)不可能执行穷尽的测试 3)测试应尽早启动,尽早介入 4)缺陷存在集群效应 5)杀虫剂悖论 6)不同的测试活动依赖不同的测试背景 7)不存在缺陷的谬论 8)测试证明软件存在缺陷的 9)妥善保存一切测试文档
5.软件测试的对象:源代码+文档+配置数据
1)需求分析阶段:测试需求文档是否正确实现用户的需求 2)系统设计阶段:概要设计文档和详细设计文档是否存在设计或逻辑上的错误 3)编码阶段:测试源代码,发现编程上的错误 4)系统测试阶段:验证被测对象是否满足用户的需求
6.软件测试级别(软件测试的阶段)
1)组件或单元测试:单元指完成某个独立功能的模块,组件指一个或多个单元组成的针对被测系统最小的组成单元实施的测试活动。一般是类或者是函数,也可以是最小的功能单元。能发现80%的错误,效果好,但是效率低。 2)集成测试:这对组件/单元与组件/单元之间的接口实施的测试活动,验证接口设计是否与设计相符。 (1)函数间的集成 (2)模块间的集成 (3)子系统间的集成 3)系统测试:将通过集成测试的软件,部署在真实的用户环境下,执行测试。效率高,常用。 4)验收测试:以用户为主的测试,验证组应该由项目组成员,用户代表组成。 (1)α测试:由用户在开发环境下,执行的测试活动,开发者就在测试人员的身边,发现问题及时沟通,解决,在受控的环境下执行的测试。 (2)β测试:开发者不在测试人员身边,发现问题由专人统一收集,再由研发人员进行修改,在不受控的环境下进行的测试。 (3)UAT测试(user allow test),一般商业用户测试系统可用性进行的测试。
7.软件测试的方法
1)黑盒测试:不关注被测对象的内部结构,仅从用户需求考虑,是否满足用户显性的或者隐性的需求。 2)白盒测试:又称为结构测试,或者逻辑驱动测试,测试工程师需要了解内部设计结构等信息,熟悉相应的开发语言,对工程技术水平要求较高。 3)灰盒测试:介于白盒和黑盒之间,即关注被测对象的外部特性,又关注其内容设计。 4)静态测试:不执行被测对象源代码,不运行被测对象的测试方法。 5)动态测试:执行被测对象,进行测试的活动 6)手工测试:通过测试工程师试用,验证被测对象是否满足用户需求。 7)自动化测试:通过自动化测试工具,或脚本语言自动完成测试过程。
8.软件质量:内部质量,过程质量,外部质量,使用质量,六大特性
1)功能性 (1)定义:软件在指定的条件下,满足用户明确的和隐含需求的功能的能力。 (2)适合性:软件为指定的任务和用户目标提供一组合适的功能的能力。 (3)准确性:软件提供具有所需的精度的正确或相符的结果或效果的能力。 (4)互操作性:软件与一个或多个的规定系统进行交互的能力。 (5)保密安全性:软件保护信息和数据的能力,以使未授权的人员或系统不能阅读或修改这些信息或数据,而不拒绝授权人员或系统对他们的方法。 (6)功能性依从性:软件遵循与功能性相关的标准,约定或法规以及类似规定的能力。这些标准包括国际标准,国家标准,行业标准,企业内部规范。 2)可靠性: (1)定义:软件在指定的条件下使用时,维持规定的性能级别的能力。 (2)成熟性:软件为避免由软件错误而导致的失效的能力。 (3)容错性:在软件出现故障或者违反指定接口的情况下,软件维持规定性能级别的能力。 (4)易恢复性:在失效发生的情况下,软件重建规定的性能级别并恢复受直接影响的数据的能力。 (5)可靠性依从性:软件遵循与可靠性相关的标准,约定或法规以及类似规定的能力。这些标准包括国际标准,国家标准,行业标准,企业内部规范。 3)易用性: (1)定义:在指定的使用条件下,软件被理解,学习,使用和吸引用户的能力。 (2)易理解性:软件使用户能理解,以及如何将软件用于特定任务和使用环境的能力。 (3)易学性: (4)易操作性: (5)吸引性: (6)易用性依从性: 4)效率: (1)定义:在规定的条件下,相对于所需资源的数量,软件可提供适应性的能力。 (2)时间特性:在规定条件下,软件执行其功能时,提供适当的响应和处理时间,以及吞吐率的能力。 (3)资源利用性:在规定条件下,软件执行其功能时,使用合适的资源数量和类别的能力。 (4)效率依从性: 5)可移植性: (1)定义:软件可被修改的能力。修改可能包括修正,改进或软件对环境、需求和功能规格说明变化的一种适应性。 (2)易分析性:软件诊断软件中的缺陷,失效的原因,或识别待修改部分的能力。 (3)易改变性:软件使制定的修改可以被实现的能力。 (4)稳定性:软件避免由于软件修改而造成的意外结果的能力。 (5)易测试性:软件使已修改软件能被确认的能力。 (6)移植性性依从性: 6)可维护性: (1)定义:软件从一种环境迁移到另外一种环境的能力 (2)适应性:软件无须采用有别于为考虑软件的目的而准备的活动或手段,就可能适应不同的环境。 (3)共存性:软件在公共环境中与其他共享公共资源的能力。 (4)易安装性:软件在制定环境中被安装的能力 (5)易替换性:软件在相同的环境下,替代另一个相同途径的制定软件产品的能力。 (6)可移植性依从性:
9.软件质量模型保证(SQA)
(1)目的:软件制作的过程对于领导层是可见的 (2)定义:是一套计划和方法向领导层保证 (3)基本目标 ①保证有计划的进行 ②保证遵循了步骤和需求 ③及时通知给相关人员 ④高管可以接触到项目内部 ⑤软件质量需要测试工作来保证
10.软件测试基本流程
11.编写测试用例
方法: 等价类划分法 边界值法 场景法 因果图及判定表 错误推测 正交实验 输入:(考虑数字域范围、数据类型、是否必填、是否重复) 输出: 测试用例一般格式:(包括) 测试用例编号 项目名称 用例名称 测试级别 测试标题 预置条件 数据输入 操作步骤 预期输出 实际输出 测试人 备注
-
echarts图表数据信息动态获取
2019-10-09 06:31:31最近开发项目用到echarts图表展示数据信息,需要调用后台接口,写一篇博客来记录一下实现过程,末尾附源码 首先准备一个json文件echarts.json(名字无所谓),用来模拟从后台获取数据 第二步上echarts官网... -
高德定位-获取经纬度信息
2020-07-14 14:40:34第一步:在index.html中引入高德API <script type="text/javascript" src="//webapi.amap.com/maps?v=2.0&key=93ecd9f56d15d54c70623ae55c6ed128&plugin=AMap.CitySearch"></scrip -
企业微信自建应用获取用户信息
2020-07-22 14:27:031.第一步,获取授权code,这个在原来首页开发不太合适,在进入首页前新建页面进行授权,点击页面按钮进行授权。需要拼接的授权url。其中corpid是企业id,redirect_uri是授权后跳转的页面,其他是固定值,可以查看... -
存储型XSS结合XSS平台获取cookie信息进后台——efucms
2019-12-29 16:34:12实验目的:利用存储型XSS获取管理员Cookie信息,修改本地Cookie信息为管理员...第一步:使用火狐渗透测试便捷版浏览器打开目标网站 第二步:找到可以发表评论的地方,输入进行XSS测试,看是否弹窗,若弹窗则说明... -
Android自动化测试中AccessibilityService获取控件信息(1)
2014-03-24 15:31:37AccessibilityService为一个响应用户发送AccessibilityEvent事件的服务类,主要用作对于一些辅助功能的实现中。对于某些方面有缺陷的人群,可以通过辅助功能反馈给用户。 关于AccessibilityService的介绍,...第一步 在 -
ES如何通过文档id获取正排信息
2020-06-13 16:22:07前言 根据文档id定位到某个字段的正排信息,常常用于需要根据某个字段排序,分类计算,这个...第一步二分查找block,定位属于哪个block。 第二步就是根据从block里根据每个chunk的起始文档号,找到属于哪个chu... -
linux系统DNS之主从、子域授权、acl与转发(第二步)
2017-11-08 19:46:00我们知道现在要访问一个网站,只要输入一个网址就可以获取到对应的页面信息,而不是用输入IP地址访问,能够完成这一功能的过程(将FQDN转换成IP地址)这就是正向解析,有了正向解析,那么反向解析... -
Spring MVC : 控制器方法处理请求的过程分析 - 1. 执行信息记录对象ModelAndViewContainer的准备
2019-08-17 20:40:12作为RequestMappingHandlerAdapter调用控制器方法处理请求的第一步,应该就是从请求中获取参数了。我们从RequestMappingHandlerAdapter调用目标控制器方法的入口#invokeHandlerMethod开始像剥洋葱一样逐层深入 : ... -
用户访问一个网站的整过程
2019-03-11 15:45:15第一步:客户端用户从浏览器输入www.baidu.com网站网址后回车,系统会查询本地hosts文件及DNS缓存信息,查找是否存在网址对应的IP解析记录。如果有就直接获取到IP地址,然后访问网站,一般第一次请求时,DNS缓存是... -
企业微信授权获取用户信息java后台和配置
2018-09-14 13:47:50背景:在企业微信工作台添加应用入口,根据点击人授权获得用户信息 简略记录一下流程: 首先要了解开发过程和开发步骤,可点击进入了解...第一步:进入企业微信管理后台页面,扫码进入https://work.weixin.qq.com/we... -
RTMP协议视频平台EasyDSS编译过程中Go语言异步信息处理设计与实现
2021-02-05 14:39:17在EasyDSS开发过程中,有此种场景:...1.第一步:发送第一次 http 请求 A ,获取 A 的结果 2.第二步:并发执行以下两个步骤: 1)将 A 的结果写入到数据库中 2)发出第二次的 http 请求 B 因为第二步是并发执行,就节 -
并绑定当前微信账号(包含云开发相关配置),强制用户授权获取信息设置
2020-04-08 19:04:37不管是小程序还是网站,登录页面都是用户进入系统程序的第一步,以下是本人在毕设过程中所做的登录页面以及利用微信云开发实现用户登录授权信息的相关过程。 1、登录页面的设计 我的登录页面开始设置的时候还没有... -
php CI框架微信开发小记——获取openid和其他相关用户信息
2016-08-10 17:14:12这是第一次写技术性博客,也是让自己在开发的过程中多累计,希望自己以后也能养成一个好习惯。 先进入正题, 第一步:微信开发前,必须先认证通过,并在接口权限中找到下图进行域名的授权 下班了, -
谈谈Spring Cloud架构中定时任务只在一个服务上执行的解决过程
2020-06-08 21:01:02第一步先获取当前服务IP 第二部获取Springcloud当前项目集群IP信息 最后将当前IP和集群的IP进行对比,如果当前IP是集群中最小的IP则执行定时任务,否则return掉 我们首先来看一下定时任务: /** * ... -
记录一次完整的paramiko安装过程
2015-02-08 01:30:40最近要在本地获取远程服务器上的实时日志信息,想到了采用paramiko模块来获取远程机器上的内容所以,第一步就是要安装paramiko这个模块的信息C:\Users\shuidiyou>easy_installparamiko Searchingforparamiko Best... -
C#获取动态网页中的数据
2019-10-10 14:34:44C#获取动态网页中的数据 在实际工作需求中,编辑的文档需要获取历史地震的信息,所以利用计算机语言获取是一个简化人工操作的必要过程,本文分享一下自己第一次获取交互信息...第一步:通过右键审查元素,点击Netwo... -
Android获取Bitmap网络图片类型
2020-06-05 18:53:43常见的获取图片格式的方式 Android中常见的图片格式有png、jpeg(jpg)、gif、...因为我们这里针对的是网络图片,所以第一步是将图片下载到本地。 通过[BitmapFactory.Options#outMimeType]获取图片格式 接着我们可以通 -
Mob第一章-分享
2016-02-26 11:29:58[2016.02.26最新版哦~~]第一步:前期准备 因为分享涉及到比如,微信,qq,微博这样的第三方平台,所以先要去你想实现分享的平台创建应用,获取相应的appKey和相关信息。 先去注册吧(这个过程很恶心,需要提供... -
java web 邮件发送全过程(链接中携带的用户信息经过加密处理)
2019-12-21 12:12:573、数据加密,第一步中用到了加密。第四步用到了解密(这里都是被调用的方法): 4、由于发送的链接定位到是重置页面,也就是他给你随机分配一个新密码,你可以拿着这个新密码重新登陆,然后去修改,这里主要是讲... -
Java中类加载过程是什么样的?
2020-03-29 09:38:11类加载的步骤为,加载 ->...2、验证:连接过程的第一步,确保 class 文件的字节流中的信息符合当前 JVM 的要求,不会危害 JVM 的安全 3、准备:为类的静态变量分配内存并将其初始化为默认值 ... -
Python爬虫获取城市的天气预报
2018-12-20 11:57:02程序的介绍 我的整个程序所爬取的是一个或多个城市七天之内的天气信息,包括天气,温度,和风级,然后获取到这些信息并将它们保存到excel表中 ...我最初的思路第一步是爬去一所... -
已知ip地址如何获取当前地理位置?
2021-02-19 13:40:32其实我们想要实现根据ip地址,获取地理...第一步、确认对方QQ并关掉浏览器等会连接网络工具。 第二步、从开始菜单打开运行,输入cmd,打开shell窗口,输入netstat 第三步、查看你当前的网络连接,然后开始跟你要查ip. -
OAuth2.0协议认证过程
2019-11-14 22:36:00第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:刷新access_token(如果需要) 第四步:拉取用户信息(需scope为 snsapi_userinfo) 微信公众号授权实战 关注微信测试公众号 ... -
解析Centos启动过程
2017-03-17 13:43:20解析Centos启动过程第一步---加载BIOS打开电源,系统会首先加载BIOS,BIOS会运行上电自检程序,对电脑的硬件设施进行完全彻底的检验和测试,检测完成后通过BIOS获取到与CPU、内存、硬盘、设备启动顺序等相关的信息。...
-
嵘泰股份首次公开发行股票招股说明书.pdf
-
EDA事件驱动架构
-
多态和final
-
2014年重庆理工大学《计算机专业英语》期末考试试卷.pdf
-
MATLAB2018从入门到精通MATLAB视频教程-实战案例版.pdf
-
CISA培训与认证精讲全套视频.txt
-
MySQL 设计基础(数据库概论、初探)
-
xxljob源码分析
-
access应用的3个开发实例
-
2014年重庆理工大学《局域网技术与组网工程》期末考试试卷.pdf
-
CNN常用模型 7 InceptionV3
-
ssh: Could not resolve hostname -: nodename nor servname provided, or not known
-
生益电子首次公开发行股票并在科创板上市招股说明书.pdf
-
脚本文件直接执行python代码
-
必得科技首次公开发行股票招股说明书.pdf
-
前后端socket通信.zip
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署
-
vue3从0到1-超详细
-
二叉树的镜像
-
MySQL 视图