OpenAPI的使用代码-判断用户名和密码

原文地址:

http://www.java2000.net/p7714
http://blog.youkuaiyun.com/java2000_net/archive/2008/07/30/2736268.aspx

此文的版权归JAVA世纪网(www.java2000.net)和优快云(www.youkuaiyun.com)所有,转载请保留此声明、代码注释和原始链接

 

 

 

优快云的 OpenAPI 提供了WebService 接口,可以使用一些现有的框架直接生成客户端调用程序,比如axis。我这里提供了另外一个简单那的方法,直接使用URLConnection进行操作,并自行解析登录的结果。

 

方法的说明
  /**
   * 检查用户名和密码。
   *
   * @author 赵学庆,www.java2000.net
   * @param username 用户名
   * @param password 密码
   * @return 如果成功,则返回true,失败返回false
   */
  public static boolean checkLogin(String username, String password)


 

准备数据:
OpenAPI里面提供了GetUserProfile的方法

我们看一下协议里面的请求部分的格式,SOAP1.2格式
http://forum.youkuaiyun.com/OpenApi/forumapi.asmx?op=GetUserProfile

 

POST /OpenApi/forumapi.asmx HTTP/1.1
Host: forum.youkuaiyun.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetUserProfile xmlns="http://www.youkuaiyun.com/">
      <identity>
        <username>string</username>
        <password>string</password>
      </identity>
      <username>string</username>
    </GetUserProfile>
  </soap12:Body>
</soap12:Envelope>

 

此方法需要提供3个参数。
1 会员用户名
2 会员的密码
3 要查看人员的用户名

 

比如你想看aaa的情况,你的用户名和密码是bbb/ccc,则调用为
GetUserProfile(bbb,ccc,aaa);
我们使用中,可以让aaa和bbb相等,也就是自己看自己。

 

我们看着部分代码

    // 以下构造提交用的web服务的内容
    StringBuilder b = new StringBuilder();
    b.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    b.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
    b.append("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ");
    b.append("xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
    b.append("<soap12:Body>");
    // 这里是调用的功能标识
    b.append(" <GetUserProfile xmlns=\"http://www.youkuaiyun.com/\">");
    // 这里是调用的用户信息标识
    b.append("  <identity>");
    // 登录用户名
    b.append("   <username>" + username + "</username>");
    // 登录密码
    b.append("   <password>" + password + "</password>");
    b.append("  </identity>");
    // 要查看的用户名,和登录用户相同
    b.append("  <username>" + username + "</username>");
    b.append(" </GetUserProfile>");
    b.append("</soap12:Body>");
    b.append("</soap12:Envelope>");

 

 

数据的提交
直接使用URLConnection进行模拟的POST提交,并读取提交的结果

 

    // 提交数据,并获取返回结果
    String textXml = postPage("http://forum.youkuaiyun.com/OpenApi/forumapi.asmx", "forum.youkuaiyun.com",
        null, b.toString())[1];


其中的postPage我将放在最后面的代码列表里面

 


返回结果的分析
我们看一下协议里面的返回数据的格式,SOAP1.2格式


HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetUserProfileResponse xmlns="http://www.youkuaiyun.com/">
      <GetUserProfileResult>boolean</GetUserProfileResult>
      <profile>
        <point>int</point>
        <techExpertPoint>int</techExpertPoint>
        <topForums>
          <TopForum>
            <forumId>guid</forumId>
            <expertPoint>int</expertPoint>
            <rank>string</rank>
          </TopForum>
          <TopForum>
            <forumId>guid</forumId>
            <expertPoint>int</expertPoint>
            <rank>string</rank>
          </TopForum>
        </topForums>
        <nonTechExpertPoint>int</nonTechExpertPoint>
        <nickName>string</nickName>
        <username>string</username>
      </profile>
      <error>
        <errId>int</errId>
        <errInfo>string</errInfo>
        <description>string</description>
      </error>
    </GetUserProfileResponse>
  </soap12:Body>
</soap12:Envelope>

 

其中有用的就是  <GetUserProfileResult>boolean</GetUserProfileResult>

 

由于返回的是xml,可以采用
1 jdom等xml解析工具,我这个例子使用了jdom进行解析
2 可以直接用正则表达式

 

我们看代码
    // 使用jdom进行解析
    SAXBuilder builder = new SAXBuilder();
    Document doc = null;
    Reader in = new StringReader(textXml);
    try {
      doc = builder.build(in);
      Element root = doc.getRootElement();
      List ls = root.getChildren();// 注意此处取出的是root节点下面的一层的Element集合
      Element body = (Element) ls.get(0);
      Element response = (Element) body.getChildren().get(0);
      List content = response.getChildren();
      Element result = (Element) content.get(0);
      // 这个是运行结果的数据
      if ("GetUserProfileResult".equals(result.getName())) {
        // 失败
        if ("true".equals(result.getText())) {
          return true;
        }
      } else {
        return false;
      }
    } catch (IOException ex) {
      ex.printStackTrace();
    } catch (JDOMException ex) {
      ex.printStackTrace();
    }

 


总结:
  我们可以通过系统提供的一个并非检测登录的服务接口,实现对用户登录信息的检测。我的网站可以使用csdn的用户名和密码登录,就是调用了这个方法进行判断。

 

 

完整的代码
  /**
   * 检查用户名和密码。
   *
   * @author 赵学庆,www.java2000.net
   * @param username 用户名
   * @param password 密码
   * @return 如果成功,则返回true,失败返回false
   */
  public static boolean checkLogin(String username, String password) {
    // 以下构造提交用的web服务的内容
    StringBuilder b = new StringBuilder();
    b.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    b.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
    b.append("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ");
    b.append("xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
    b.append("<soap12:Body>");
    // 这里是调用的功能标识
    b.append(" <GetUserProfile xmlns=\"http://www.youkuaiyun.com/\">");
    // 这里是调用的用户信息标识
    b.append("  <identity>");
    // 登录用户名
    b.append("   <username>" + username + "</username>");
    // 登录密码
    b.append("   <password>" + password + "</password>");
    b.append("  </identity>");
    // 要查看的用户名,和登录用户相同
    b.append("  <username>" + username + "</username>");
    b.append(" </GetUserProfile>");
    b.append("</soap12:Body>");
    b.append("</soap12:Envelope>");
    // 提交数据,并获取返回结果
    String textXml = postPage("http://forum.youkuaiyun.com/OpenApi/forumapi.asmx", "forum.youkuaiyun.com",
        null, b.toString())[1];
    // 使用jdom进行解析
    SAXBuilder builder = new SAXBuilder();
    Document doc = null;
    Reader in = new StringReader(textXml);
    try {
      doc = builder.build(in);
      Element root = doc.getRootElement();
      List ls = root.getChildren();// 注意此处取出的是root节点下面的一层的Element集合
      Element body = (Element) ls.get(0);
      Element response = (Element) body.getChildren().get(0);
      List content = response.getChildren();
      Element result = (Element) content.get(0);
      // 这个是运行结果的数据
      if ("GetUserProfileResult".equals(result.getName())) {
        // 失败
        if ("true".equals(result.getText())) {
          return true;
        }
      } else {
        return false;
      }
    } catch (IOException ex) {
      ex.printStackTrace();
    } catch (JDOMException ex) {
      ex.printStackTrace();
    }
    return false;
  }


  /**
   * 提交数据到指定的地址
   *
   * @param urlTo 指定提交的地址
   * @param host 主机名称
   * @param cookies cookies的数据
   * @param data 提交的数据
   * @return 返回提交的结果数组,[0] 为返回的cookie 数据,[1]为返回的内容本体数据
   */
  private static String[] postPage(String urlTo, String host, String cookies, String data) {
    try {
      URL url = new URL(urlTo);
      HttpURLConnection con = (HttpURLConnection) url.openConnection();
      con.setDoOutput(true); // POST方式
      con.setRequestMethod("POST");
      con.addRequestProperty("Host", host);
      con.addRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
      if (cookies != null) {
        con.addRequestProperty("Cookie", cookies);
      }
      byte[] bs = data.getBytes("UTF-8");
      con.addRequestProperty("Content-Length", Integer.toString(bs.length));
      OutputStream os = con.getOutputStream(); // 输出流,写数据
      os.write(bs);
      Map<String, List<String>> map = con.getHeaderFields();
      String[] rtn = new String[2];
      String cookie = "";
      if (map.get("Set-Cookie") != null)
        for (String v : map.get("Set-Cookie")) {
          cookie += v.substring(0, v.indexOf(";") + 1);
        }
      rtn[0] = cookie;
      BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(),
          "UTF-8")); // 读取结果
      String line;
      StringBuilder b = new StringBuilder();
      while ((line = reader.readLine()) != null) {
        b.append(line);
      }
      reader.close();
      rtn[1] = b.toString();
      return rtn;
    } catch (Exception ex) {
      ex.printStackTrace();
      return null;
    }
  }











<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
测试金蝶云的OpenAPI 在本篇博客中,我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧! 阅读详情

相关推荐

历时 3 天!从需求评审到接口上线,我是如何设计高可靠 OpenApi 的

今天老大给我布置了一项重要任务:开发一个对外提供服务的 OpenApi,用于和第三方系统对接。这个接口不仅要稳定可靠,还必须做好幂等性处理,并且使用sign签名机制保障数据传输的安全性。作为一名有七年 Java 开发经验的工程师,我将按照标准的开发流程,从需求分析入手,逐步完成技术选型、项目搭建与代码实现

Minoz_wl的博客 2323

OpenAPI的使用代码-登录优快云

原文地址:http://www.java2000.net/p7715http://blog.csdn.net/java2000_net/archive/2008/07/30/2736659.aspx此文的版权归JAVA世纪网(www.java2000.net)和优快云(www.csdn.net)所有,转载请保留此声明、代码注释和原始链接优快云在很早以前就提供了登录优快云的OpenAPI,

老紫竹的专栏 4385

openapi-generator,openapi生成器允许自动生成api客户端库(sdk生成)、服务器存根、文档和配置,并给出openapi规范(v2,v3).zip

openapi生成器

如何优雅的为开放平台设计一个安全好用的OpenApi?

????这是一个或许对你有用的社群????一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事中“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

weixin_44421461的博客 359

易语言ADSL帐号密码获取源码(附模块)

附带模块

使用 Mid360 从零开始搭建实物机器人入门级导航系统 —— 基于 Fast_Lio 和 Move_Base

本文详细介绍了如何使用Mid360机器人从零开始搭建一个基于Fast_Lio和Move_Base的入门级导航系统。通过配置 ROS2、集成激光雷达、IMU、Fast_Lio、Move_Base 等模块,我们成功构建了一个能够实现自动导航的机器人系统。在实际开发中,随着需求的变化,你可以不断调整参数、优化路径规划算法、增加新的传感器等,逐步提升机器人的智能与功能。

小蜗牛的珍贵百宝箱 3570

太强了!看看别人设计的安全好用的OpenApi!

???? 欢迎加入小哈的星球,你将获得:专属的项目实战/ Java 学习路线 / 一对一提问 / 学习打卡/赠书福利目前, 正在星球内部带小伙伴做第一个项目:全栈前后端分离博客,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了110小节,累计16w+字,讲解图:734张,还在持续爆肝中.. 后续还会上新更多项目,目标是将Java领域典型...

犬小哈 174

【ArcGIS教程】基于DEM数据的洪水淹没分析——提取淹没区并计算淹没区洪水量

使用ArcGIS开展洪水淹没区分析、提取淹没区并计算淹没区洪水量的详细说明,如果想获取教程中实验数据,请关注微信公众号【GIS小能手】然后在后台留言。

weixin_45469245的博客 6822

SQLYog快捷键大全

连接Ctrl+M   创建一个新的连接Ctrl+N   使用当前设置新建连接Ctrl+F4   断开当前连接对象浏览器F5   刷新对象浏览器(默认)Ctrl+B   设置焦点于对象浏览器SQL 窗口Ctrl+T   新建查询编辑器Ctrl+E   设置焦点于 SQL 窗口Ctrl+Y   重做 Ctrl+Z   撤销  Ctrl+X   剪切    Ctrl+V   粘贴 Ctrl+H   替换

海风~ 6529

【可不卸载重装】VS2019新建项目里没有CUDA选项

问题:VS2019 新建项目里没有CUDA选项,vs也属性没有cuda。这是因为你在Visual Studio 2019安装之前,先安装了CUDA Toolkit。

qq_62844901的博客 1323

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

优快云--OpenAPI的使用代码-判断用户名和密码

http://www.java2000.net/p7714http://blog.csdn.net/java2000_net/archive/2008/07/30/2736268.aspx此文的版权归JAVA世纪网(www.java2000.net)和优快云(www.csdn.net)所有,转载请保留此声明、代码注释和原始链接   优快云的 OpenAPI 提供了WebSe

gogo313的专栏 852

UG\NX二次开发 一个创建小平面体的例子

介绍。

王牌飞行员_里海的博客 445

SpringBoot 整合 knfe4j ,使用 OpenAPI3 规范

SpringBoot + Knife4j ,生成API 文档

N_007的博客 1万+

微信小程序 - 最新实现项目适老化设计全流程及源码,老年模式大字版与常规版页面样式切换,老年人大字模式字体与布局更换关怀版解决方案(新老项目均适用的方案,全局页面统一修改文本字号/DOM排版元素等)

微信小程序,vue2,vue3,老年大字版设计,小程序开发如何实现适老化方案,放大字体字号及改变页面的布局,小程序关怀模式实现思路及代码,统一将布局都改了,全局修改字体大小适配老年人看不清问题,小程序怎么接入老年模式并根据模式改变页面的UI设计,实现全局修改字体大小适老化/关怀版改造,最新详细示例代码全流程,字体放大/缩小,老项目怎么适配老年人模式方案,小程序适老化设计指南,当切换成老年模式时页面所有排版都会发生变化,小程序vue开发,新手详细教程,老年模式字体设置思路和UI布局的设计,开发者可以通过wx.

🏆 前端领域优质创作者 7311

YOLOv13安装教程 手把手教你融合空间注意力机制(SAB)的RAB卷积模块 自动“聚焦”重要的特征 map指标提升8.96,准确率提升3.56

本文提出了一种改进的YOLOv13目标检测模型,通过引入RAB(残差注意力模块)显著提升了检测性能。实验结果显示,添加RAB模块后,mAP指标提升了8.96,准确率提高了3.56%。文章详细介绍了RAB模块的实现方法:1)采用多级残差连接增强特征提取能力;2)结合空间注意力机制(SAB)自动聚焦关键区域;3)通过1×1卷积实现通道维度压缩与恢复。同时提供了完整的模型移植方案,包括配置文件修改、任务处理代码调整以及模块实现细节,为YOLO系列模型的性能优化提供了有效参考。

FJN110的博客 647

SpringBoot基于OpenAPI3的接口文档管理快速集成和使用

本文主要简单介绍SpringCloud2023中进行接口文档管理,方便前后端开发和文档维护。文档管理工具基于开源的knife4j封装的openapi3。

欢迎关注公众号“雨林寻北”,添加个人微信codetrend(备注技术)。 2053

46、聚类算法在智能交通数据分析中的应用

本文探讨了聚类算法在智能交通数据分析中的应用,介绍了K-均值算法、K-中心点算法和基于模型的聚类算法的基本原理及特点,并结合实际交通数据讨论了其应用场景与挑战。通过聚类分析,能够从海量交通数据中发现隐藏模式,为交通管理和规划提供科学依据。文章还展示了具体的案例分析和实现流程,为未来智能交通系统的发展提供了参考。

zz67890的博客 134

本人已经实现的使用OpenAPI的应用汇总

本人已经实现的使用OpenAPI的应用汇总

jgfyyfd的博客 1904

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

OpenApi3.0注解说明

OpenApi3.0 常用注解说明

追逐自己的目标,感受生活的乐趣。Elcker 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【实战系列】OpenApi设计规范

为了统一、规范接口标准,为了业务能力的复用,为了接入方快速接入,所以必须要设计一套OpenApi的规范出来,又因为是统一的对外接口,所以需要额外的关注接口安全性、复用性等方面问题,接下来跟我一起来分析吧。...

自律使我自由 6467

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

最快1天,搭建你的OpenAPI和开放平台

什么是OpenAPI、什么是开放平台? 根据百度百科的记录, 在互联网时代,把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做Open API,提供开放API的平台本身就被称为开放平台。 百度百科 我们也可以通过一些案例来快速认识开放平台,例如支付宝的开放平台: 又如抖音开放平台: 以及微信开放平台: 总结下来,开放平台一般有以下特点: 1、二级域名通常使用open,例如:open.xxx.com 2、使用人群和用户...

qq_17324713的博客 6364
上一篇: JAVA通过Session和Cookie实现网站自动登录的技术
下一篇: OpenAPI的使用代码-登录优快云
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值