Alexa 智能音箱开发智能家居

一,前期准备材料

  1. 一个亚马逊开发者账户。注册是免费的
  2. 连接设备,如灯,恒温器,相机或带有云API的锁,用于控制它
  3. 支持Alexa的设备,例如Amazon Echo
  4. 一个AWS账户。您在AWS Lambda函数中托管您的技能代码(这个账户可以注册,可以免费使用12个月,但需要绑定信用卡,且必须交1美元的预授权的费用,国内信用卡可以绑定,亲测)
  5. 了解JSON
  6. Java,Node.js,C#或Python作为Lambda函数的知识可以用任何这些语言编写
  7. 了解OAuth 2.0

二,技能创建

https://developer.amazon.com/zh/alexa  登录上述网址,并登录您的账号,在下图选择你的技能创建

进去之后,点击create skill,技能名称输入您的技能名,语言默认(也可以选择你自己喜欢的语言,然而并不支持中文,所以。。。),模型选择 智能家居,然后点击创建技能。

三,技能设置

 

  1. Payload version 选择v3
  2. Smart Home service endpoint  

            2.1 AWS Lambda ARN 设置  Your Skill ID  点击复制到文本,方便后面使用

            2.2  Default endpoint*  这个是你在创建aws lambda函数时对应的表达式,在后面会给出具体的位置。

                    

            2.3  下面三个复选框 只是为了让你给不同的地区选择不同的区域,为了使用不同的语言版本用户时能够得到更好的体验

                   此处只使用默认的端点,不勾选其它的。

      3.完成以上设置,请点击保存按钮。

四,lambda 函数的创建

       1.登录您的lambda控制台,如果找不到lambda函数的具体位置,请点击aws-->计算-->选择lambda,或者直接搜索。

       2.进入lambda控制台,点击创建功能,选择从新开始,输入名称,因为笔者是用java开发的,所以运行的哪一块就选择                       java8

      3.选择角色,若没有点击创建,具体流程就不再介绍了,https://developer.amazon.com/docs/smarthome/steps-to-build-a-                smart-home-skill.html#create-an-iam-role-for-lambda

     4.进行lambda配置(在配置前请确保右上角你的地区选择,因为有的地区的触发器没有smart home 选项),

      在左侧的触发器,里面选择 alexa smart home,然后点击它,并进行配置,复制你的技能id,并添加。

       

     5.点击右上角的保存

 

五,配置你的账户关联

    在配置账户关联之前请确保2.2 步骤的默认端点已填写你刚才创建的lambda函数,

    

 

六,关于如何通过lambda向本地进行测试

    如果我们在一个项目里面写业务逻辑,然后再进行上传jar包到lambda函数的话,有很多的确点,一方面就意味着你要重复的上传代码,如果你的网络允许你这样做的话,当我没说。另一方面,如果代码上传完你需要调试的话会很麻烦。

   所以,我们可以这么做

// -*- coding: utf-8 -*-// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.// Licensed under the Amazon Software License (the "License"). You may not use this file except in
// compliance with the License. A copy of the License is located at//    http://aws.amazon.com/asl/// or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific
// language governing permissions and limitations under the License.import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Scanner;import org.json.JSONObject;import com.amazonaws.services.lambda.runtime.Context;public class AlexaHandler {public static void handler(InputStream inputStream, OutputStream outputStream, Context context) {String request;try {System.out.println("----开始请求");request = getRequest(inputStream);//System.out.println("Request:");System.out.println("请求参数:"+request);String reqURL = "https://www.******/rest/alexa/S_Alexa_Gateway/postGateway";// url参数转换String url = UrlEncoderUntil.GetRealUrl(reqURL + "?request=" + request);// 响应内容String responseData=  GetSample(url);System.out.println("----结束请求");System.out.println(responseData);outputStream.write(responseData.getBytes(Charset.forName("UTF-8")));} catch (Exception e) {e.printStackTrace();}}/*** 说明: 发送请求到后台(请求转发) 方法名: GetSample* * @param url* @return*/private static String GetSample(String url) {StringBuilder sb = new StringBuilder();try {URL iurl = new URL(url);HttpURLConnection c = (HttpURLConnection) iurl.openConnection();c.connect();int status = c.getResponseCode();switch (status) {case 200:case 201:case 202:BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));String line;while ((line = br.readLine()) != null) {sb.append(line + "\n");}br.close();}} catch (IOException e) {e.printStackTrace();}return sb.toString();}@SuppressWarnings("unused")private static JSONObject GetResponse(String json) {InputStream inputStream = new ByteArrayInputStream(json.getBytes(Charset.forName("UTF-8")));OutputStream outputStream = new OutputStream() {private StringBuilder sb = new StringBuilder();@Overridepublic void write(int b) throws IOException {this.sb.append((char) b);}public String toString() {return this.sb.toString();}};String responseString = outputStream.toString();return new JSONObject(responseString);}/*** 说明:判断请求的是否有值,若没有值返回空 方法名: getRequest* * @param is* @return*/static String getRequest(java.io.InputStream is) {Scanner s = new Scanner(is).useDelimiter("\\A");return s.hasNext() ? s.next() : "";}
}
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;public class UrlEncoderUntil {public static void main(String[] args)throws Exception {String str="http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=C._A&sty=FCOIATA&sortType=C&sortRule=-1&page=1&pageSize=70&js=var%20quote_123%3d{rank:[(x)],pages:(pc)}&token=7bc05d0d4c3c22ef9fca8c2a912d779c&jsName=quote_123&_g=0.5927966693718834";String result=GetRealUrl(str);System.out.println(result);}//对url中的参数进行url编码public static String GetRealUrl(String str) {try {int index = str.indexOf("?");if (index < 0) return str;String query = str.substring(0, index);String params = str.substring(index + 1);Map map = GetArgs(params);//Map map=TransStringToMap(params);String encodeParams = TransMapToString(map);return query + "?" + encodeParams;} catch (Exception ex) {System.out.println(ex.getMessage());}return "";}//将url参数格式转化为mappublic static Map GetArgs(String params) throws Exception{Map map=new HashMap();String[] pairs=params.split("&");for(int i=0;i<pairs.length;i++){int pos=pairs[i].indexOf("=");if(pos==-1) continue;String argname=pairs[i].substring(0,pos);String value=pairs[i].substring(pos+1);value= URLEncoder.encode(value,"utf-8");map.put(argname,value);}return map;}//将map转化为指定的String类型public static String TransMapToString(Map map){java.util.Map.Entry entry;StringBuffer sb = new StringBuffer();for(Iterator iterator = map.entrySet().iterator(); iterator.hasNext();){entry = (java.util.Map.Entry)iterator.next();sb.append(entry.getKey().toString()).append( "=" ).append(null==entry.getValue()?"":entry.getValue().toString()).append (iterator.hasNext() ? "&" : "");}return sb.toString();}//将String类型按一定规则转换为Mappublic static Map TransStringToMap(String mapString){Map map = new HashMap();java.util.StringTokenizer items;for(StringTokenizer entrys = new StringTokenizer(mapString, "&"); entrys.hasMoreTokens();map.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null))items = new StringTokenizer(entrys.nextToken(), "=");return map;}
}

通过以上的代码,你就可以轻松的把请求转发到你的本地去,那样就方便多了。

后台接收lambda请求的方法。。。

package com.cn.whirlpool.services.alexaIot;import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;import org.apache.commons.lang3.StringUtils;
import org.codehaus.jettison.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;import com.cn.whirlpool.services.DbService;
import com.cn.whirlpool.services.RedisService;import Utils.UicJsonUtils;
import antlr.Token;/***  说明: S_DingDong_Gateway* @author author* @date 2018年9月10日*/
@SuppressWarnings("unused")
@Transactional
@Component
@Provider
@Path("/alexa/S_Alexa_Gateway")
public class S_Alexa_Gateway {@Autowiredprivate AlexaResponse alexaResponse;@Autowiredprivate S_Alexa_Discovery s_Alexa_Discovery;@Autowiredprivate S_Alexa_Controller s_Alexa_Controller;private static Logger log = LoggerFactory.getLogger(S_Alexa_Gateway.class);DbService redis=RedisService.getInstance();@SuppressWarnings("unused")@GET@Path("/postGateway/")public JSONObject postGateway(@Context HttpServletRequest request, @Context HttpServletResponse response) throws Exception {JSONObject jsonObject =new JSONObject();//打印请求的参数,这样方便查看,后面删掉showParams(request);// 用来接收返回信息的对象信息AlexaResponse alexaResponse = null;//处理接收的参数String requestParam  = request.getParameter("request");// 接收请求信息JSONObject jsonRequest = new JSONObject(requestParam);JSONObject directive = (JSONObject) jsonRequest.get("directive");JSONObject header = (JSONObject) directive.get("header");JSONObject payload = (JSONObject) directive.get("payload");String namespace = header.optString("namespace", "INVALID");String correlationToken = header.optString("correlationToken", "INVALID");//客户的授权码String code = null;//客户的访问令牌String token = null;if (payload.has("grant")) {JSONObject grant = (JSONObject) payload.get("grant");code = grant.optString("code", "INVALID");}if (payload.has("grantee")) {JSONObject grantee = (JSONObject) payload.get("grantee");token = grantee.optString("token", "INVALID");}switch(namespace) {case "Alexa"://状态报告log.info("Found Alexa Namespace");alexaResponse = s_Alexa_Discovery.StateReport(jsonRequest);break;case "Alexa.Authorization": //向alexa发送网关事件,主要是事件验证使用log.info("Found Alexa.Authorization Namespace");alexaResponse = new AlexaResponse("Alexa.Authorization","AcceptGrant.Response");JSONObject payloads = new JSONObject("{}");alexaResponse.SetPayload(payloads.toString());//alexaResponse = new AlexaResponse("Alexa.Authorization","AcceptGrant", "INVALID", "INVALID", correlationToken);break;case "Alexa.Discovery"://发现设备的命令log.info("Found Alexa.Discovery Namespace");alexaResponse = s_Alexa_Discovery.Discovery(jsonRequest);log.info("发现设备的响应参数:"+alexaResponse.toString());break;case "Alexa.PowerController"://开关设备的指令System.out.println("Found Alexa.PowerController Namespace");alexaResponse = s_Alexa_Controller.Controller(jsonRequest,namespace);log.info("控制设备开关的响应参数:"+alexaResponse.toString());break;case "Alexa.ThermostatController"://温度控制指令System.out.println("Found Alexa.ThermostatController Namespace");alexaResponse = s_Alexa_Controller.Controller(jsonRequest,namespace);log.info("控制设备温度的响应参数:"+alexaResponse.toString());break;//以下功能未实现case "Alexa.ModeController"://模式设置的指令(暂时不支持,该功能只有预览版才有)System.out.println("Found Alexa.ModeController Namespace");alexaResponse = s_Alexa_Controller.Controller(jsonRequest,namespace);log.info("控制设备模式的响应参数:"+alexaResponse.toString());break;case "Alexa.RangeController"://温度范围设置的指令(暂时不支持,该功能只有预览版才有)System.out.println("Found Alexa.RangeController Namespace");alexaResponse = s_Alexa_Controller.Controller(jsonRequest,namespace);log.info("控制设备温度范围的响应参数:"+alexaResponse.toString());break;default:System.out.println("INVALID Namespace");alexaResponse = new AlexaResponse();break;	}jsonObject = new JSONObject(alexaResponse.toString());log.info(jsonObject.toString());return jsonObject;}@SuppressWarnings({ "unused", "rawtypes", "unchecked" })private void showParams(HttpServletRequest request) {Map map = new HashMap();Enumeration paramNames = request.getParameterNames();while (paramNames.hasMoreElements()) {String paramName = (String) paramNames.nextElement();String[] paramValues = request.getParameterValues(paramName);if (paramValues.length == 1) {String paramValue = paramValues[0];if (paramValue.length() != 0) {map.put(paramName, paramValue);}}}Set<Map.Entry<String, String>> set = map.entrySet();System.out.println("------------------------------");for (Map.Entry entry : set) {System.out.println(entry.getKey() + ":" + entry.getValue());}System.out.println("------------------------------");}}

响应的方法

package com.cn.whirlpool.services.alexaIot;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.TimeZone;
import java.util.UUID;import javax.ws.rs.ext.Provider;import org.apache.commons.lang3.StringUtils;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;@Transactional
@Component
@Provider
public class AlexaResponse {private JSONObject response = new JSONObject("{}");private JSONObject event = new JSONObject("{}");private JSONObject header = new JSONObject("{}");private JSONObject endpoint = new JSONObject("{}");private JSONObject payload = new JSONObject("{}");private String CheckValue(String value, String defaultValue) {if (value.isEmpty())return defaultValue;return value;}public AlexaResponse() throws JSONException {this("Alexa", "Response", "INVALID", "INVALID", null);}public AlexaResponse(String namespace, String name) throws JSONException { this(namespace, name, "INVALID", "INVALID", null); }public AlexaResponse(String namespace, String name,String errType,String errMessage) throws JSONException {header.put("namespace", CheckValue(namespace, "Alexa"));header.put("name", CheckValue(name,"Response"));header.put("messageId", UUID.randomUUID().toString());header.put("payloadVersion", "3");event.put("header", header);event.put("endpoint", endpoint);if (StringUtils.isNotBlank(errType)) {payload.put("type", CheckValue(errType, "INVALID"));payload.put("message", CheckValue(errMessage, "INVALID"));}event.put("payload", payload);response.put("event", event);}public AlexaResponse(String namespace, String name, String endpointId, String token, String correlationToken) throws JSONException {header.put("namespace", CheckValue(namespace, "Alexa"));header.put("name", CheckValue(name,"Response"));header.put("messageId", UUID.randomUUID().toString());header.put("payloadVersion", "3");if (correlationToken != null) {header.put("correlationToken", CheckValue(correlationToken, "INVALID"));}JSONObject scope = new JSONObject("{}");scope.put("type", "BearerToken");scope.put("token", CheckValue(token, "INVALID"));endpoint.put("scope", scope);endpoint.put("endpointId", CheckValue(endpointId, "INVALID"));event.put("header", header);event.put("endpoint", endpoint);event.put("payload", payload);response.put("event", event);}public AlexaResponse(String namespace, String name, String endpointId, String token, String correlationToken,String errType,String errMessage) throws JSONException {header.put("namespace", CheckValue(namespace, "Alexa"));header.put("name", CheckValue(name,"Response"));header.put("messageId", UUID.randomUUID().toString());header.put("payloadVersion", "3");if (StringUtils.isBlank(correlationToken)) {header.put("correlationToken", CheckValue(correlationToken, "INVALID"));}JSONObject scope = new JSONObject("{}");scope.put("type", "BearerToken");scope.put("token", CheckValue(token, "INVALID"));endpoint.put("scope", scope);endpoint.put("endpointId", CheckValue(endpointId, "INVALID"));event.put("header", header);event.put("endpoint", endpoint);if (StringUtils.isNotBlank(errType)) {payload.put("type", CheckValue(errType, "INVALID"));payload.put("message", CheckValue(errMessage, "INVALID"));}event.put("payload", payload);response.put("event", event);}public AlexaResponse(String namespace, String name, String endpointId, String token, String correlationToken,String errType,String errMessage,String validRange) throws JSONException {header.put("namespace", CheckValue(namespace, "Alexa"));header.put("name", CheckValue(name,"Response"));header.put("messageId", UUID.randomUUID().toString());header.put("payloadVersion", "3");if (StringUtils.isBlank(correlationToken)) {header.put("correlationToken", CheckValue(correlationToken, "INVALID"));}JSONObject scope = new JSONObject("{}");scope.put("type", "BearerToken");scope.put("token", CheckValue(token, "INVALID"));endpoint.put("scope", scope);endpoint.put("endpointId", CheckValue(endpointId, "INVALID"));event.put("header", header);event.put("endpoint", endpoint);if (StringUtils.isNotBlank(errType)&&StringUtils.isNotBlank(validRange)) {payload.put("type", CheckValue(errType, "INVALID"));payload.put("message", CheckValue(errMessage, "INVALID"));payload.put("validRange", new JSONObject(validRange));}event.put("payload", payload);response.put("event", event);}public void AddCookie(String key, String value) throws JSONException {JSONObject endpointObject = response.getJSONObject("event").getJSONObject("endpoint");JSONObject cookie;if (endpointObject.has("cookie")) {cookie = endpointObject.getJSONObject("cookie");cookie.put(key, value);} else {cookie = new JSONObject();cookie.put(key, value);endpointObject.put("cookie", cookie);}}public void AddPayloadEndpoint(String friendlyName, String endpointId, String capabilities) throws JSONException {JSONObject payload = response.getJSONObject("event").getJSONObject("payload");if (payload.has("endpoints")){JSONArray endpoints = payload.getJSONArray("endpoints");endpoints.put(new JSONObject(CreatePayloadEndpoint(friendlyName, endpointId, capabilities, null)));}else{JSONArray endpoints = new JSONArray();endpoints.put(new JSONObject(CreatePayloadEndpoint(friendlyName, endpointId, capabilities, null)));payload.put("endpoints", endpoints);}}public void AddContextProperty(String namespace, String name, String value, int uncertaintyInMilliseconds) throws JSONException {JSONObject context;JSONArray properties;try {context = response.getJSONObject("context");properties = context.getJSONArray("properties");} catch (JSONException jse) {context = new JSONObject();properties = new JSONArray();context.put("properties", properties);}properties.put(new JSONObject(CreateContextProperty(namespace, name, value, uncertaintyInMilliseconds)));response.put("context", context);}public String CreateContextProperty(String namespace, String name, String value, int uncertaintyInMilliseconds) throws JSONException   {JSONObject property = new JSONObject();try {property.put("namespace", namespace);property.put("name", name);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'");TimeZone tz = TimeZone.getTimeZone("UTC");sdf.setTimeZone(tz);String timeOfSample = sdf.format(new Date().getTime());property.put("timeOfSample", timeOfSample);property.put("uncertaintyInMilliseconds", uncertaintyInMilliseconds);/*  property.put("value", value);*/property.put("value", new JSONObject(value));} catch (Exception je) {property.put("value", value);}return property.toString();}public String CreatePayloadEndpoint(String friendlyName, String endpointId, String capabilities, String cookie) throws JSONException{JSONObject endpoint = new JSONObject();endpoint.put("capabilities", new JSONArray(capabilities));//设备的描述(暂时写死)endpoint.put("description", "Whirlpool smart home");//没有找到对应的类型,暂时全部为otherJSONArray displayCategories = new JSONArray("[\"OTHER\"]");endpoint.put("displayCategories", displayCategories);//设备制造商的名称endpoint.put("manufacturerName", "Whirlpool Corporation");if (endpointId == null)endpointId = "endpoint_" + 100000 + new Random().nextInt(900000);endpoint.put("endpointId", endpointId);if (friendlyName == null)friendlyName = "Sample Endpoint";endpoint.put("friendlyName", friendlyName);if (cookie != null)endpoint.put("cookie", new JSONObject(cookie));return endpoint.toString();}public String CreatePayloadEndpointCapability(String type, String interfaceValue, String version, String properties, String configuration) throws JSONException {JSONObject capability = new JSONObject();capability.put("type", type);capability.put("interface", interfaceValue);capability.put("version", version);if (properties != null)capability.put("properties", new JSONObject(properties));if (configuration!=null) {capability.put("configuration", new JSONObject(configuration));}return capability.toString();}public void SetPayload(String payload) throws JSONException {response.getJSONObject("event").put("payload", new JSONObject(payload));}@Overridepublic String toString() {return response.toString();}
}

 

后面的话可根据请求的不同类型进行不同的方法。

关于java如何请求响应请查看亚马逊alexa的列子

https://github.com/alexa/skill-sample-java-smarthome-switch/blob/master/instructions/setup-the-sample-resources.md

 

最后声明,本文章纯属原创,未经允许禁止转载。谢谢。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46914.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国 CS 就业,大多数公司真的不看学校吗?

来源&#xff1a;https://www.zhihu.com/question/57166186 编辑&#xff1a;深度学习与计算机视觉 声明&#xff1a;仅做学术分享&#xff0c;侵删 论坛里&#xff0c;经常有人说&#xff1a;「CS 就业不看学校」。 请问除了 Oracle 之类的公司&#xff0c;大多数 IT 公司看不…

不想被时代淘汰?网络工程师未来的出路在这里!

在01年的时候&#xff0c;一名有经验的网络工程师&#xff0c;工资收入可以达到2W/月&#xff0c;和当时的薪资水平比&#xff0c;简直高出了一个世纪。 当时的培训机构还不像现在遍地都是&#xff0c;他们学习网络知识是通过几个人合伙出钱买设备死磕技术&#xff0c;还有人就…

相机光圈和快门

相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈&#xff08;Ap…

AutoCV第二课:Python基础

目录 Python基础前言1.流程控制1.1 条件语句1.2 循环语句1.2.1 while循环语句1.2.2 for循环语句 1.3 作业1.4 拓展-try except语法 2.函数2.1 函数定义2.2 函数的参数2.2.1 位置参数2.2.2 命名参数2.2.3 默认参数2.2.4 可变参数2.2.5 参数展开 2.3 递归函数2.3.1 递归函数定义2…

Ubuntu20.04服务器接收SYN,不返回SYN+ACK

情况 Ubuntu20.04 live 服务器启动了一个Nginx服务&#xff0c;服务使用80端口&#xff0c;服务器有2个网卡。经过公司H3C路由器NAT转发&#xff0c;将内部服务器的80端口映射到公网5088端口。通过内网的主机可以服务Nginx服务&#xff0c;通过公网IP5088端口&#xff0c;无法…

IP编址(包括网络地址和广播地址)

1.总述 IP地址使用32位二进数表示&#xff0c;每一个主机或路由器的接口都有全局唯一的IP地址&#xff08;NAT是个例外&#xff09;&#xff0c;它由网络号(NetID)和主机号(HostID)组成&#xff0c;它可以分为五类&#xff0c;如下&#xff1a; 2.地址划分 1&#xff09;A…

怎样解决ip访问受限问题

现在是互联网时代。一些网络工作者需要收集一些网站的数据&#xff0c;收集数据需要频繁访问网站。为了有效控制网站流量&#xff0c;保证用户访问速度&#xff0c;一些目标网站会限制单个IP访问请求次数。对于爬虫工作者来说&#xff0c;目标网站限制访问的机制让他们头疼。那…

vcenter服务器修改ip,vcenter服务器默认ip地址

vcenter服务器默认ip地址 内容精选 换一换 安全组类似防火墙功能,是一个逻辑上的分组,用于设置网络访问控制。用户可以在安全组中定义各种访问规则,当弹性云服务器加入该安全组后,即受到这些访问规则的保护。入方向:入方向规则放通入方向网络流量,指从外部访问安全组规则…

没有计算机网络地址怎么办,教大家电脑没有ip地址mac地址怎么办

近日有关于电脑没有ip地址mac地址怎么办的问题受到了很多网友们的关注,大多数网友都想要知道电脑没有ip地址mac地址怎么办的具体情况,那么关于到电脑没有ip地址mac地址怎么办的相关信息,小编也是在网上进行了一系列的信息,那么接下来就由小编来给大家分享下小编所收集到与电…

什么是IP地址

一、IP地址概念 IP地址是一个32位的二进制数&#xff0c;它由网络ID和主机ID两部份组成&#xff0c;用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段&#xff1b;主 机ID用来标识计算机在网段中的位置。IP地址通常用4组3位十进制数表示&#xff0c;中间用…

IP地址的规划和设计方法(一)

一&#xff0c;IP地址的概念和划分地址新技术的研究 (1)标准分类的IP地址 第一阶段是在IPv4协议制定的初期&#xff0c;时间大致在1981年左右。那时候网络的规模比较小&#xff0c;用户一般是通过终端&#xff0c; 经过大型计算机或中小型计算机接入ARPANET。 IP地址是由网络号…

IP地址划分和子网

本文主要介绍IP地址划分&#xff0c;子网&#xff0c;子网掩码相关知识。 IP地址划分历史 根据IP地址的研究和发展&#xff0c;暂时分为4个阶段&#xff0c;重要是前两个阶段。 标准分类的IP地址 最开始接入网络的计算机比较少&#xff0c;IP地址由网络号和主机号构成&#x…

计算机三级考点8:IP地址分类。

IP地址分类。 1.标准分类的IP地址。 常用的A类&#xff0c;B类&#xff0c;C类采用包括“网络号-主机号”的两极的层级结构。 IP地址::{<网络号>,<主机号>}] IPv4的地址长度是32bit&#xff0c;用点分十进制表示&#xff0c;如x.x.x.x的格式。其中每个x为8bit&a…

cloudflare边缘IP受限报错1034解决方案

1034报错原因 cloudflare官方说明写的很清楚&#xff0c;将域指向 1.1.1.1 的客户现在会遇到 1034 错误。这是因为 Cloudflare 系统采取了新的边缘验证检查措施&#xff0c;目的是防止配置错误和/或潜在的滥用。 解决方案 官方说明&#xff1a;确保 DNS 记录指向您控制的 IP 地…

特殊ip地址——受限广播地址

在 IPv4 中&#xff0c;一个受限广播地址是指一个用于发送广播信息的特殊地址&#xff0c;它的范围是限定在一个子网内的。这种地址用来发送信息给与发送者在同一子网内的所有计算机。受限广播地址的形式通常是最后一个子网地址加上 255&#xff0c;例如&#xff0c;如果子网地…

asp.net医院信息管理系统

医院信息管理系统是一个专门为医院服务的系统&#xff0c;严格的按照医院的就诊流程进行的开发&#xff0c;同时为了能够让工作人员更方便的上手系统&#xff0c;系统的开发遵循了简单&#xff0c;大方的开发原则。 首先病人来了以后有挂号人员根据病人的实际情况进行挂号&…

500强企业常用的高效工作方法

文章目录 前言一、500强企业常用的高效工作方法二、1.30秒法则2.PDCA3.5W1H4.ECRS5.SMART6.SWOT分析法7.4M1E法8.28原则9.ASK模型10.5s管理11.海因里希法则12.鱼骨图分析法13.DISC模型14.时间四项法则15.有效沟通的7C原则16.高效人士七个习惯 前言 带着“如何在最短时间内做最…

计算机病毒常见病状,有哪些常见的计算机病毒症状

计算机中了病毒有什么症状呢?通常情况下&#xff0c;当计算中病毒后&#xff0c;在电脑操作者看来并无明显的特征&#xff0c;但是我们仍然可以通过一些细节问题来判断电脑是否已中病毒。下面就让学习啦小编给大家说说常见的计算机病毒症状有哪些吧。 常见的计算机病毒症状 文…

backtrader量化回测----基础使用1,附完整代码

今天我们体测完1000米感觉人都要废了&#xff0c;目前在学习天勤量化&#xff0c;但是我还是打算仔细将这个量化框架介绍完&#xff0c;我们开始下面介绍来自官网&#xff0c;因为有时候官网打不开&#xff0c;我将仔细介绍&#xff0c;我们开始。 需要程序关注微信公众号&…

神经网络量化之 Ristretto、增量量化INQ、IAO代码实战分析

神经网络量化之 Ristretto、增量量化INQ、IAO代码实战分析 博文末尾支持二维码赞赏哦 _ 1. Ristretto 固定点浮点数量化 详细介绍 量化逼近方案 Ristretto允许以三种不同的量化策略来逼近卷积神经网络&#xff1a; 1、动态固定点&#xff1a;修改的定点格式&#xff0c; D…