内网环境如何访问钉钉服务接口

环境描述

由于工作需要,业务项目需要部署在内网中,然后通过另一台可访问公网的服务器作为代理服务器,实现公网访问业务

公网 代理服务器 业务服务器 请求业务 转发请求至实际业务 转发业务响应 返回业务响应 可访问公网 不能访问公网 需要访问钉钉的接口 公网 代理服务器 业务服务器 网络情况

问题描述

由于业务服务不能直接访问公网,关于钉钉业务代码无法执行

限制说明

  1. 业务服务器不能开通公网访问,只能访问代理服务器
  2. 原有代码不能过多改动,尽量少改

实现思路

  1. 在代理服务器构建服务接收钉钉服务接口请求,并转发至公网,钉钉服务接口成功响应后,数据再返回到业务服务器的响应中
  2. 使用sanic的中间件拦截所有请求以及对应的请求参数

代码展示

@app.middleware('request')
def handle_request(request):
    dingDingTalk = DingTalkClient(request)
    return json(status=200, body=dingDingTalk.get_result())


@app.route('/<path>', methods=["GET", "POST"], strict_slashes=False)
async def path(request):
    return json(status=200, body={})


@app.route('/<path>/<path2>', methods=["GET", "POST"], strict_slashes=False)
async def path2(request):
    return json(status=200, body={})


@app.route('/<path>/<path2>/<path3>', methods=["GET", "POST"], strict_slashes=False)
async def path3(request):
    return json(status=200, body={})


@app.route('/<path>/<path2>/<path3>/<path4>', methods=["GET", "POST"], strict_slashes=False)
async def path4(request):
    return json(status=200, body={})




if __name__ == '__main__':
    app.run(host='0.0.0.0', port=800, debug=False)

说明: 由于本身框架本身会匹配路由, /<path 是为了让请求顺利抵达中间件

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值