当前位置: 首页 > news >正文

如何做简单的网站长期网站外包

如何做简单的网站,长期网站外包,自动下单网站开发,wordpress 文章延时加载项目中有一个登录邮箱提醒的功能#xff0c;需要根据IP地址获取定位信息#xff0c;从而更好地提示用户账号登录的所在地。为此#xff0c;花费了一些时间来实现这个功能。 在CSDN搜索了一下#xff0c;发现关于获取定位的文章说明都不够详细#xff0c;于是决定自己创作一…项目中有一个登录邮箱提醒的功能需要根据IP地址获取定位信息从而更好地提示用户账号登录的所在地。为此花费了一些时间来实现这个功能。 在CSDN搜索了一下发现关于获取定位的文章说明都不够详细于是决定自己创作一篇文章希望能够帮助到有需求的小伙伴~ 因为博主日常生活中用的导航APP就是百度地图所以使用百度地图的API来实现这个功能。 目录 百度地图开放平台 开始前的准备工作 学习官网API文档 修改API的AK配置 Java代码获取定位 通过官网生成代码 运行生成的代码 创建接口返回对象 Point.java Location.java Content.java AddressDetail.java 将JSON字符串转成Location对象 代码的最后优化 百度地图开放平台 本篇文章都是围绕百度地图的开放平台官网的相关说明来展开的访问下面的链接 百度地图开放平台 | 百度地图API SDK | 地图开发https://lbsyun.baidu.com/index.php?title%E9%A6%96%E9%A1%B5这是开放平台的首页截图 开始前的准备工作 点击上方导航菜单的开发文档-Web服务API总览 紧接着点击左侧菜单中的定位点击普通IP定位 然后根据开发文档的提示完成步骤1、2、3 学习官网API文档 最后点击步骤4开始使用百度地图的API 如上图文档已经给出了API的接口地址和参数说明以及API接口返回的参数格式。 {address: CN|北京市|北京市|None|None|100|91,content: {address: 北京市,address_detail: {adcode: 110000,city: 北京市,city_code: 131,district: ,province: 北京市,street: ,street_number: },point: {x: 116.41338370,y: 39.91092455}},status: 0 } 修改API的AK配置 在这里需要修改一下创建的应用的相关设置。 点击上图的设置按钮来到这个页面然后拉到页面的底部修改应用的请求校验方式为sn校验方式然后点击提交按钮。 把AK复制到示例代码的输入框中点击确认按钮自动生成获取定位的Java代码可以说非常方便。 Java代码获取定位 通过官网生成代码 新建一个类SearchHttpAK把示例代码复制到SearchHttpAK类里复制按钮在下图红框内。 调整之后的代码如下真实的AK和SK都已经被博主替换了这里的5个x改成自己的AK和SK就行了。 package cn.edu.sgu.www.authority.util;import org.springframework.web.util.UriUtils;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.security.NoSuchAlgorithmException; import java.util.LinkedHashMap; import java.util.Map;/*** 选择AK使用SN校验* author heyunlin* version 1.0*/ public class SearchHttpSN {public static String AK xxxxx;public static String SK xxxxx;public static String URL https://api.map.baidu.com/location/ip?;public static void main(String[] args) throws Exception {SearchHttpSN snCal new SearchHttpSN();MapString, String params new LinkedHashMap(4);params.put(ip, 111.206.214.37);params.put(coor, bd09ll);params.put(ak, AK);params.put(sn, snCal.caculateSn());snCal.requestGetSN(URL, params);}/*** 选择了ak使用SN校验* 根据您选择的AK已为您生成调用代码* 检测您当前的AK设置了sn检验本示例中已为您生成sn计算代码* param strUrl* param param* throws Exception*/public void requestGetSN(String strUrl, MapString, String param) throws Exception {if (strUrl null || strUrl.length() 0 || param null || param.size() 0) {return;}StringBuilder queryString new StringBuilder();queryString.append(strUrl);for (Map.Entry?, ? pair : param.entrySet()) {queryString.append(pair.getKey()).append();// 第一种方式使用的 jdk 自带的转码方式 第二种方式使用的 spring 的转码方法 两种均可// queryString.append(URLEncoder.encode((String) pair.getValue(), UTF-8).replace(, %20) );queryString.append(UriUtils.encode((String) pair.getValue(), UTF-8)).append();}if (queryString.length() 0) {queryString.deleteCharAt(queryString.length() - 1);}java.net.URL url new URL(queryString.toString());System.out.println(queryString.toString());URLConnection httpConnection (HttpURLConnection) url.openConnection();httpConnection.connect();InputStreamReader isr new InputStreamReader(httpConnection.getInputStream());BufferedReader reader new BufferedReader(isr);StringBuilder buffer new StringBuilder();String line;while ((line reader.readLine()) ! null) {buffer.append(line);}reader.close();isr.close();System.out.println(SN: buffer);}public String caculateSn() throws UnsupportedEncodingException,NoSuchAlgorithmException {SearchHttpSN snCal new SearchHttpSN();// 计算sn跟参数对出现顺序有关get请求请使用LinkedHashMap保存key,value该方法根据key的插入顺序排序post请使用TreeMap保存key,value该方法会自动将key按照字母a-z顺序排序。// 所以get请求可自定义参数顺序sn参数必须在最后发送请求但是post请求必须按照字母a-z顺序填充bodysn参数必须在最后。// 以get请求为例http://api.map.baidu.com/geocoder/v2/?address百度大厦outputjsonakyourakparamsMap中先放入address再放output然后放ak放入顺序必须跟get请求中对应参数的出现顺序保持一致。MapString, String paramsMap new LinkedHashMap(3);paramsMap.put(ip, 111.206.214.37);paramsMap.put(coor, bd09ll);paramsMap.put(ak, AK);// 调用下面的toQueryString方法对LinkedHashMap内所有value作utf8编码拼接返回结果address%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6outputjsonakyourakString paramsStr snCal.toQueryString(paramsMap);// 对paramsStr前面拼接上/geocoder/v2/?后面直接拼接yoursk得到/geocoder/v2/?address%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6outputjsonakyourakyourskString wholeStr new String(/location/ip? paramsStr SK);System.out.println(wholeStr);// 对上面wholeStr再作utf8编码String tempStr URLEncoder.encode(wholeStr, UTF-8);// 调用下面的MD5方法得到最后的sn签名String sn snCal.MD5(tempStr);System.out.println(sn);return sn;}// 对Map内所有value作utf8编码拼接返回结果public String toQueryString(Map?, ? data) {StringBuilder queryString new StringBuilder();for (Map.Entry?, ? pair : data.entrySet()) {queryString.append(pair.getKey()).append();// 第一种方式使用的 jdk 自带的转码方式 第二种方式使用的 spring 的转码方法 两种均可// queryString.append(URLEncoder.encode((String) pair.getValue(), UTF-8).replace(, %20) );queryString.append(UriUtils.encode((String) pair.getValue(), UTF-8)).append();}if (queryString.length() 0) {queryString.deleteCharAt(queryString.length() - 1);}return queryString.toString();}// 来自stackoverflow的MD5计算方法调用了MessageDigest库函数并把byte数组结果转换成16进制public String MD5(String md5) {try {java.security.MessageDigest md java.security.MessageDigest.getInstance(MD5);byte[] array md.digest(md5.getBytes());StringBuilder sb new StringBuilder();for (byte b : array) {sb.append(Integer.toHexString((b 0xFF) | 0x100), 1, 3);}return sb.toString();} catch (java.security.NoSuchAlgorithmException ignored) { }return null;} } 注意不要修改这里的map的放入顺序否则请求接口会报错~ MapString, String params new LinkedHashMap(4);params.put(ip, 111.206.214.37); params.put(coor, bd09ll); params.put(ak, AK);params.put(sn, snCal.caculateSn()); 运行生成的代码 然后运行一下代码如果能看到下面这样的运行结果恭喜你你已经成功了一大半~ 不要纠结获取到的位置信息里很多16进制因为马上就要把他转成一个自定义的实体类 创建接口返回对象 根据这个API返回的JSON格式字符串的结构创建4个对应的实体类 Point.java import lombok.Data;/*** author heyunlin* version 1.0*/ Data public class Point {private String x;private String y; } Location.java import lombok.Data;/*** author heyunlin* version 1.0*/ Data public class Location {private Integer status;private String address;private Content content; } Content.java import lombok.Data;/*** author heyunlin* version 1.0*/ Data public class Content {private Point point;private String address;private AddressDetail address_detail; } AddressDetail.java import lombok.Data;/*** author heyunlin* version 1.0*/ Data public class AddressDetail {private String adcode;private String city;private String city_code;private String province;private String district;private String street;private String street_number; } 将JSON字符串转成Location对象 修改一下部分方法的名称然后把字符串通过fastjson的API转成Location对象 package cn.edu.sgu.www.authority.util;import cn.edu.sgu.www.authority.location.Location; import com.alibaba.fastjson.JSON; import org.springframework.web.util.UriUtils;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.LinkedHashMap; import java.util.Map;/*** 选择AK使用SN校验* author heyunlin* version 1.0*/ public class SearchHttpSN {public static String AK xxxxx;public static String SK xxxxx;public static String URL https://api.map.baidu.com/location/ip?;public static void main(String[] args) throws Exception {String ip 111.206.214.37;String location getLocation(ip);System.out.println(JSON.parseObject(location, Location.class));}public static String getLocation(String ip) throws Exception {MapString, String params new LinkedHashMap(4);params.put(ip, ip);params.put(coor, bd09ll);params.put(ak, AK);params.put(sn, caculateSn());return getLocation(URL, params);}/*** 选择了ak使用SN校验* 根据您选择的AK已为您生成调用代码* 检测您当前的AK设置了sn检验本示例中已为您生成sn计算代码* param strUrl* param param* throws Exception*/public static String getLocation(String strUrl, MapString, String param) throws Exception {if (strUrl null || strUrl.length() 0 || param null || param.size() 0) {return null;}StringBuilder queryString new StringBuilder();queryString.append(strUrl);for (Map.Entry?, ? pair : param.entrySet()) {queryString.append(pair.getKey()).append();// 第一种方式使用的 jdk 自带的转码方式 第二种方式使用的 spring 的转码方法 两种均可// queryString.append(URLEncoder.encode((String) pair.getValue(), UTF-8).replace(, %20) );queryString.append(UriUtils.encode((String) pair.getValue(), UTF-8)).append();}if (queryString.length() 0) {queryString.deleteCharAt(queryString.length() - 1);}java.net.URL url new URL(queryString.toString());System.out.println(queryString);URLConnection httpConnection url.openConnection();httpConnection.connect();InputStreamReader isr new InputStreamReader(httpConnection.getInputStream());BufferedReader reader new BufferedReader(isr);StringBuilder sb new StringBuilder();String line;while ((line reader.readLine()) ! null) {sb.append(line);}reader.close();isr.close();return sb.toString();}public static String caculateSn() throws UnsupportedEncodingException {// 计算sn跟参数对出现顺序有关get请求请使用LinkedHashMap保存key,value该方法根据key的插入顺序排序post请使用TreeMap保存key,value该方法会自动将key按照字母a-z顺序排序。// 所以get请求可自定义参数顺序sn参数必须在最后发送请求但是post请求必须按照字母a-z顺序填充bodysn参数必须在最后。// 以get请求为例http://api.map.baidu.com/geocoder/v2/?address百度大厦outputjsonakyourakparamsMap中先放入address再放output然后放ak放入顺序必须跟get请求中对应参数的出现顺序保持一致。MapString, String paramsMap new LinkedHashMap(3);paramsMap.put(ip, 111.206.214.37);paramsMap.put(coor, bd09ll);paramsMap.put(ak, AK);// 调用下面的toQueryString方法对LinkedHashMap内所有value作utf8编码拼接返回结果address%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6outputjsonakyourakString paramsStr toQueryString(paramsMap);// 对paramsStr前面拼接上/geocoder/v2/?后面直接拼接yoursk得到/geocoder/v2/?address%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6outputjsonakyourakyourskString wholeStr new String(/location/ip? paramsStr SK);System.out.println(wholeStr);// 对上面wholeStr再作utf8编码String tempStr URLEncoder.encode(wholeStr, UTF-8);// 调用下面的MD5方法得到最后的sn签名return MD5(tempStr);}// 对Map内所有value作utf8编码拼接返回结果public static String toQueryString(Map?, ? data) {StringBuilder queryString new StringBuilder();for (Map.Entry?, ? pair : data.entrySet()) {queryString.append(pair.getKey()).append();// 第一种方式使用的 jdk 自带的转码方式 第二种方式使用的 spring 的转码方法 两种均可// queryString.append(URLEncoder.encode((String) pair.getValue(), UTF-8).replace(, %20) );queryString.append(UriUtils.encode((String) pair.getValue(), UTF-8)).append();}if (queryString.length() 0) {queryString.deleteCharAt(queryString.length() - 1);}return queryString.toString();}// 来自stackoverflow的MD5计算方法调用了MessageDigest库函数并把byte数组结果转换成16进制public static String MD5(String md5) {try {java.security.MessageDigest md java.security.MessageDigest.getInstance(MD5);byte[] array md.digest(md5.getBytes());StringBuilder sb new StringBuilder();for (byte b : array) {sb.append(Integer.toHexString((b 0xFF) | 0x100), 1, 3);}return sb.toString();} catch (java.security.NoSuchAlgorithmException ignored) { }return null;}} 运行代码效果如下 在使用的时候只需要传入IP地址即可获取到定位信息~ 代码的最后优化 上面的代码已经是进行了一定的优化除此之外可以把AK和SK配置到application.yml中可以动态地修改。最后重命名一下这个类改成类似LocationUtils这样的名字。 好了文章就分享到这里了看完如果觉得对你有所帮助不要忘了点赞收藏哦~
http://www.w-s-a.com/news/465286/

相关文章:

  • ui设计零基础好学吗珠海网站建设优化推广
  • 网站开发多少费用火车头采集wordpress发布时间
  • 有没有做皮艺的网站教育培训网站建设ppt
  • 建设外贸商城网站制作如何建设景区旅游网站
  • 网站建设服务的具体条件怎么建设一个响应式网站
  • 做flash的网站wordpress设置前台投稿
  • 商务网站开发文档迅雷资源做下载网站
  • 无极磁铁网站如何把地图放到自己做的网站上
  • 青浦赵巷网站建设公司网站开发需求文档
  • 苏州网站建设的公司哪家好无锡网站制作那些
  • 装饰公司网站模板科技成果鉴定机构
  • 给公司做的东西放到私人网站上十堰为企业做网站的单位
  • 手机网站建设价钱手机自己做网站
  • 网站建设属于哪种公司电子商务查询网站
  • 工程建设标准强制性条文最新版本网站关键词排名优化应该怎么做
  • 网站网页设计内容品牌高端网站建设公司
  • 网站开发报价 福州中国建筑网官网手机版
  • 网站 图片 自动往右移专门做定制化的网站
  • 最好用的cms手机百度关键词排名 网站优化软件
  • 凉山州城乡规划建设局网站长沙网站建设哪家强
  • 广州网站开发创意设计公司企业自己怎么制作网站首页
  • 曲靖 曲靖网站建设软件(app)开发wordpress 没有远程发布
  • 官方网站开发与定制网站建设技术是干嘛的
  • 昆明网站建设工作室网站菜单导航怎么做的
  • 南京网站做的好的公司猪八戒网站做推广怎么样
  • 建站收费标准福州网站搭建
  • 做防护用品的网站欧美网站建设风格特点
  • 龙华做网站联系电话北京软件开发培训班
  • 做网站运营有前途网站的建设与管理的心得体会
  • 河南网站推广怎么做网页制作免费下载