V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
paulw54jrn
V2EX  ›  程序员

吐槽一下华为光伏的 API 文档

  •  
  •   paulw54jrn · 2019-10-08 21:05:49 +08:00 · 6075 次点击
    这是一个创建于 1907 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近装了太阳能板,想用 lambda + grafana + prometheus 爬一下逆变器的各种数据做个简单的 dashboard.


    然后发现华为光伏的 API 文档写的实在有点粗糙..

    还有一些不能理解的地方:

    • https 证书居然还是 self signed,居然连个证书都不舍得?
    • 登录居然要把用户名和密码在 URL 里面传...
    • 登录失败不返回 401,返回 200...
      curl -vkX POST \
        'https://au1.fusionsolar.huawei.com:27200/openApi/login?userName=FOO&password=BAR'
      
      *   Trying 54.153.220.93...
      * TCP_NODELAY set
      * Connected to au1.fusionsolar.huawei.com (54.153.220.93) port 27200 (#0)
      * ALPN, offering h2
      * ALPN, offering http/1.1
      * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
      * successfully set certificate verify locations:
      *   CAfile: /etc/ssl/cert.pem
        CApath: none
      * TLSv1.2 (OUT), TLS handshake, Client hello (1):
      * TLSv1.2 (IN), TLS handshake, Server hello (2):
      * TLSv1.2 (IN), TLS handshake, Certificate (11):
      * TLSv1.2 (IN), TLS handshake, Request CERT (13):
      * TLSv1.2 (IN), TLS handshake, Server finished (14):
      * TLSv1.2 (OUT), TLS handshake, Certificate (11):
      * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
      * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
      * TLSv1.2 (OUT), TLS handshake, Finished (20):
      * TLSv1.2 (IN), TLS change cipher, Client hello (1):
      * TLSv1.2 (IN), TLS handshake, Finished (20):
      * SSL connection using TLSv1.2 / AES128-SHA
      * ALPN, server did not agree to a protocol
      * Server certificate:
      *  subject: C=CN; ST=Guangdong; L=Shenzhen; O=Huawei; OU=Network Energy; CN=NetEcoServer
      *  start date: Mar 18 01:23:06 2015 GMT
      *  expire date: Mar 13 01:23:06 2035 GMT
      *  issuer: C=CN; O=huawei; OU=Network Energy; CN=NEPL PKI
      *  SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.
      > POST /openApi/login?userName=FOO&password=BAR HTTP/1.1
      > Host: au1.fusionsolar.huawei.com:27200
      > User-Agent: curl/7.54.0
      > Accept: */*
      >
      < HTTP/1.1 200 OK
      < Date: Tue, 08 Oct 2019 13:02:55 GMT
      < Set-Cookie: JSESSIONID=1jsi0rnxij5mzokex34wnr7ig;Path=/;Secure;HttpOnly
      < Expires: Thu, 01 Jan 1970 00:00:00 GMT
      < Cache-Control: no-cache
      < X-Frame-Options: SAMEORIGIN
      < X-Download-Options: noopen
      < X-XSS-Protection: 1;mode=block
      < Strict-Transport-Security: max-age=31536000;includeSubdomains
      < X-Content-Type-Options: nosniff
      < Vary: Accept-Encoding, User-Agent
      < Transfer-Encoding: chunked
      <
      {"errorMsg":309}
      * Connection #0 to host au1.fusionsolar.huawei.com left intact
      

    文档参考:

    32 条回复    2019-10-09 22:02:19 +08:00
    droiz
        1
    droiz  
       2019-10-08 21:13:33 +08:00   ❤️ 1
    凭我对华为软件部门的了解,这属于正常操作...
    paulw54jrn
        2
    paulw54jrn  
    OP
       2019-10-08 21:19:56 +08:00
    相比之下硬件文档实在强太多了
    https://support.huawei.com/enterprise/en/doc/EDOC1100011912

    ----
    self sign 和用户名密码走 query string 真的不能忍
    nosilence
        3
    nosilence  
       2019-10-08 21:22:47 +08:00
    正常操作,正常操作
    saulshao
        4
    saulshao  
       2019-10-08 22:16:13 +08:00
    这个属于软件部门的正常水平,要知道申请个证书是需要某级别领导审批的。根本就说不清楚为什么这东西还要花钱?
    wangyzj
        5
    wangyzj  
       2019-10-08 22:32:38 +08:00
    谁说一定要走 jwt 模式或者 header auth 模式就一定是好的?
    证书也是钱啊
    200+errcode 也挺好,省着 catch 了
    xabc
        6
    xabc  
       2019-10-08 22:48:13 +08:00 via iPhone
    我的问题,卤煮房子是别墅独栋那种 还是 普通顶层?
    hakono
        7
    hakono  
       2019-10-08 22:53:59 +08:00   ❤️ 2
    证书太贵,需要领导审批
    response 一律 200 附带错误码,是因为需要自定义大量错误码自己处理

    把账号密码放到 url 里传………………………………
    对不起,我真的编不下去了,没法洗地了…………
    paulw54jrn
        8
    paulw54jrn  
    OP
       2019-10-09 06:01:43 +08:00 via Android
    @wangyzj
    没有人说一定要走 JWT 或者 header auth.

    但是用户名密码走 Query string 这个怎么洗?
    用户名密码全部明文记在了 Http log 里面这么基础的安全问题怎么洗?

    关于证书要花钱,这么大个企业一年千把块人民币真的出不起吗?现在导致 https 形同虚设
    OSF2E
        9
    OSF2E  
       2019-10-09 08:26:51 +08:00
    可能是造火箭的团队临时被拉过来拧螺丝吧
    serge001
        10
    serge001  
       2019-10-09 09:05:04 +08:00
    可能是外包做的
    sunziren
        11
    sunziren  
       2019-10-09 09:13:25 +08:00
    你住别墅?
    stoneabc
        12
    stoneabc  
       2019-10-09 09:24:34 +08:00
    这种可能真的是外包做的…
    qwerthhusn
        13
    qwerthhusn  
       2019-10-09 09:30:20 +08:00
    八成是外包搞的,因为我曾经干过华为的外包。。。
    没有 80/443 端口给用
    没有证书(外包给的外网权限非常低,大部分网站都访问不了,当然也没发领个免费的证书)
    http 200 一把梭,这个很正常
    cloudzhou
        14
    cloudzhou  
       2019-10-09 09:31:33 +08:00
    @paulw54jrn 但是我看文档,通过 POST 传递,所以你用 form 提交也是可以的,只是你自己的代码怎么写而已
    collery
        15
    collery  
       2019-10-09 09:32:19 +08:00
    嗯,都是外包的锅。毕竟除了硬件都是外包
    alphatoad
        16
    alphatoad  
       2019-10-09 10:50:40 +08:00 via iPhone
    讲道理,有 https 账号密码放 query 不是一个特别大的问题
    huijiewei
        17
    huijiewei  
       2019-10-09 10:52:19 +08:00   ❤️ 1
    @alphatoad 你搞笑么。服务器日志不脱敏的?
    alphatoad
        18
    alphatoad  
       2019-10-09 11:20:34 +08:00 via iPhone   ❤️ 2
    @huijiewei 我没有搞笑,但是我只想到了密码学安全,确实没有想到这一层,你说的对
    Juggernaut
        19
    Juggernaut  
       2019-10-09 13:14:24 +08:00
    华为就这水平
    aguesuka
        20
    aguesuka  
       2019-10-09 15:22:47 +08:00 via Android
    正常,海康的接口还是 http,hash 做检验。转动全省 500 多个球机的 aip
    subpo
        21
    subpo  
       2019-10-09 15:25:18 +08:00
    对华为的软件水平无力吐槽

    对楼主装的光伏很感兴趣,详细说说?
    jjshare
        22
    jjshare  
       2019-10-09 16:13:26 +08:00
    朋友多大的屋顶,大概费用多少,我最近寻思着是不是要出一个家用智能光伏解决方案
    wind98
        23
    wind98  
       2019-10-09 16:15:23 +08:00
    外包做的,毕竟是硬件公司
    seansong
        24
    seansong  
       2019-10-09 16:25:50 +08:00
    登陆失败返回 200 很正常吧,http 状态码指的是你的协议请求是否成功了,而登陆失败是业务状态,协议返回 200,业务状态码返回登陆失败,这不是常规操作么
    paulw54jrn
        25
    paulw54jrn  
    OP
       2019-10-09 19:42:13 +08:00
    @cloudzhou 嗯,说的对,后来又试了一下走 `application/x-www-form-urlencoded` 在 POST body 里面是可行的。
    https://forum.huawei.com/enterprise/en/communicating-with-neteco-through-an-openapi-user/thread/512431-100027 这里面的截图带歪了,里面走的是 query string
    paulw54jrn
        26
    paulw54jrn  
    OP
       2019-10-09 19:52:59 +08:00
    @jjshare

    屋顶具体面积没量过.

    目前方案是:
    - 20 片 日升 RSM120-6-330M http://www.risenenergy.com/uploadfile/201908/85d961e3f3.pdf
    - 华为 SUN20005KTL
    - 正泰 DTSU666-H 电表

    因为不在国内安装,具体费用可能参考价值不大。
    paulw54jrn
        27
    paulw54jrn  
    OP
       2019-10-09 19:56:12 +08:00
    @seansong

    API 走 RPC 风格或者 REST 风格这个更多是个人偏好。

    但是对于在 http 协议里面已经有明确定义的状态个人觉得是直接走状态码更加简洁清晰。
    bwd1991
        28
    bwd1991  
       2019-10-09 20:22:19 +08:00
    把华为想的太高了?
    ppt 公司
    Chry3anthemum
        29
    Chry3anthemum  
       2019-10-09 20:26:27 +08:00 via Android
    @bwd1991 软件同意,硬件那波是在难以苟同
    realpg
        30
    realpg  
       2019-10-09 20:44:59 +08:00
    华为基本盘……
    你这是没见到曾经的 mib file
    droiz
        31
    droiz  
       2019-10-09 21:58:47 +08:00 via iPhone
    @collery 也不全是,但内部一些软件系统也是稀烂
    lolizeppelin
        32
    lolizeppelin  
       2019-10-09 22:02:19 +08:00
    我来洗

    内部 http 服务为了性能简化了功能,会忽略所有 body 数据,这不就结了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.