js_RPC,sekiro框架,实现HTTPS通讯

1、sekiro服务端部署

项目地址:yint-tech/sekiro-open: SEKIRO是一个多语言的、分布式、网络拓扑无关的服务发布平台,通过书写各自语言的handler将功能发布到中心API市场,业务系统通过RPC的方式使用远端节点的能力 (github.com)icon-default.png?t=N176https://github.com/yint-tech/sekiro-open文档地址:

服务器部署 · Sekiro系统文档 (iinti.cn)icon-default.png?t=N176http://sekiro.iinti.cn/sekiro-doc/02_server/1.busniess_server.html所用环境是Ubuntu20

安装步骤:

1、安装docker

我参照的是这个文档

(48条消息) Ubuntu安装 Docker_胡八一 的博客-CSDN博客_ubuntu安装dockericon-default.png?t=N176https://blog.csdn.net/qq_44732146/article/details/121207737

2、安装docker-compose

sudo pip install docker-compose

3、安装sekiro

启动docker之后,执行如下命令,如果失败,可以直接执行下面的quickstart.sh文件

curl https://oss.iinti.cn/sekiro/quickstart.sh | bash

或者直接执行下面这个quickstart.sh

#!/usr/bin/env bash
now_dir=`pwd`

if [ ! -d sekiro_compose ]; then
   mkdir "sekiro_compose"
else
   rm -rf sekiro_compose/*
fi

cd sekiro_compose

curl -o "sekiro_compose.zip" "https://oss.iinti.cn/sekiro/sekiro-compose.zip"

(unzip --help) /dev/null 2>&1 || {
  echo
  echo "no unzip cmd , please install unzip first: yum install -y unzip"
  exit 4
}


unzip sekiro_compose.zip

sudo docker-compose down;

sudo docker pull registry.cn-beijing.aliyuncs.com/iinti/common:sekiro3server-latest

sudo docker-compose up -d

如下图:

js_RPC,sekiro框架,实现HTTPS通讯_第1张图片

 打开网址http://服务器的IP:5612

js_RPC,sekiro框架,实现HTTPS通讯_第2张图片

 注册账号,第一个注册账号是超级管理员

js_RPC,sekiro框架,实现HTTPS通讯_第3张图片

 

4、接下来,尝试过几种不同的方法让客户端和服务器连接上

下面的截图是官方的教程

js_RPC,sekiro框架,实现HTTPS通讯_第4张图片

 (1)构造子域名的方法

        在服务器的/etc/hosts文件里面配置如下

127.0.0.1   sekiro.licdn.com   (后面的这个域名是自己随便起的)

js_RPC,sekiro框架,实现HTTPS通讯_第5张图片

现在浏览器打开 http://sekiro.licdn.com:5612 看看是不是能正常打开进去网站,用刚刚注册的账号密码进行登录,这个带域名的网站和刚刚的网站是同一个网站。

      下一步安装CA证书,官网有提供证书,直接下载。我下载的是pem格式的证书。

SSL证书方案 · Sekiro系统文档http://sekiro.iinti.cn/sekiro-doc/01_user_manual/6.sslForWebsocket.htmlUbuntu命令行安装证书,直接搜索网上的,可以使用。

js_RPC,sekiro框架,实现HTTPS通讯_第6张图片

 过程图

js_RPC,sekiro框架,实现HTTPS通讯_第7张图片

现在浏览器打开 https://sekiro.licdn.com:5612 看看是不是能正常打开进去网站,注意http修改成了https,我到这一步的时候,还是会报不安全,截图如下:

js_RPC,sekiro框架,实现HTTPS通讯_第8张图片

安装证书还是提示Warning: Potential Security Risk Ahead,后来我在浏览器上调整了浏览器安全证书的容忍度,也是网上搜的,好像调整一下就好了,具体记不清楚了,大家可以试一下。

 接下来注入js代码,并建立wss连接,复制官方的代码:

如下并做局部修改,将下面的wss://www.linkedin.cn/business/register?group=ws-group&clientId=修改为wss://sekiro.licdn.com:5612/business/register?group=ws-group&clientId=

function SekiroClient(e){if(this.wsURL=e,this.handlers={},this.socket={},!e)throw new Error("wsURL can not be empty!!");this.webSocketFactory=this.resolveWebSocketFactory(),this.connect()}SekiroClient.prototype.resolveWebSocketFactory=function(){if("object"==typeof window){var e=window.WebSocket?window.WebSocket:window.MozWebSocket;return function(o){function t(o){this.mSocket=new e(o)}return t.prototype.close=function(){this.mSocket.close()},t.prototype.onmessage=function(e){this.mSocket.onmessage=e},t.prototype.onopen=function(e){this.mSocket.onopen=e},t.prototype.onclose=function(e){this.mSocket.onclose=e},t.prototype.send=function(e){this.mSocket.send(e)},new t(o)}}if("object"==typeof weex)try{console.log("test webSocket for weex");var o=weex.requireModule("webSocket");return console.log("find webSocket for weex:"+o),function(e){try{o.close()}catch(t){}return o.WebSocket(e,""),o}}catch(t){console.log(t)}if("object"==typeof WebSocket)return function(o){return new e(o)};throw new Error("the js environment do not support websocket")},SekiroClient.prototype.connect=function(){console.log("sekiro: begin of connect to wsURL: "+this.wsURL);var e=this;try{this.socket=this.webSocketFactory(this.wsURL)}catch(o){console.log("sekiro: create connection failed,reconnect after 2s"),setTimeout(function(){e.connect()},2e3)}this.socket.onmessage(function(o){e.handleSekiroRequest(o.data)}),this.socket.onopen(function(e){console.log("sekiro: open a sekiro client connection")}),this.socket.onclose(function(o){console.log("sekiro: disconnected ,reconnection after 2s"),setTimeout(function(){e.connect()},2e3)})},SekiroClient.prototype.handleSekiroRequest=function(e){console.log("receive sekiro request: "+e);var o=JSON.parse(e),t=o.__sekiro_seq__;if(!o.action)return void this.sendFailed(t,"need request param {action}");var n=o.action;if(!this.handlers[n])return void this.sendFailed(t,"no action handler: "+n+" defined");var s=this.handlers[n],i=this;try{s(o,function(e){try{i.sendSuccess(t,e)}catch(o){i.sendFailed(t,"e:"+o)}},function(e){i.sendFailed(t,e)})}catch(r){console.log("error: "+r),i.sendFailed(t,":"+r)}},SekiroClient.prototype.sendSuccess=function(e,o){var t;if("string"==typeof o)try{t=JSON.parse(o)}catch(n){t={},t.data=o}else"object"==typeof o?t=o:(t={},t.data=o);(Array.isArray(t)||"string"==typeof t)&&(t={data:t,code:0}),t.code?t.code=0:t.status?t.status=0:t.status=0,t.__sekiro_seq__=e;var s=JSON.stringify(t);console.log("response :"+s),this.socket.send(s)},SekiroClient.prototype.sendFailed=function(e,o){"string"!=typeof o&&(o=JSON.stringify(o));var t={};t.message=o,t.status=-1,t.__sekiro_seq__=e;var n=JSON.stringify(t);console.log("sekiro: response :"+n),this.socket.send(n)},SekiroClient.prototype.registerAction=function(e,o){if("string"!=typeof e)throw new Error("an action must be string");if("function"!=typeof o)throw new Error("a handler must be function");return console.log("sekiro: register action: "+e),this.handlers[e]=o,this};

var client = new SekiroClient("wss://www.linkedin.cn/business/register?group=ws-group&clientId=" + Math.random());
client.registerAction("testAction", function (request, resolve, reject) {
	  c = undefined;
      resolve(window.ja("d_incareer2_profile_homepage", c));
});

 回车如下:

js_RPC,sekiro框架,实现HTTPS通讯_第9张图片

 但是好景不长呀,后面没多久就出问题了,如下:

js_RPC,sekiro框架,实现HTTPS通讯_第10张图片

在其他HTTPS网站是可以用的,但是到这个网站就不行,可能是这个网站的安全等级比较高,可能是证书问题嘛?也不太清楚 , 后来我访问https://sekiro.licdn.com:5612/时,发现还是不安全的。

当天这个问题没有解决,第二天了,继续。

更新一下docker

js_RPC,sekiro框架,实现HTTPS通讯_第11张图片

 给浏览器设置代理到127.0.0.1 5612,这样浏览器访问就会经过sekiro服务器

重新将上面的wss连接进行修改如下:

var client = new SekiroClient("wss://www.linkedin.cn/business/register?group=ws-group&clientId=xxxxx");这样wss建立连接的时候,访问www.linkedin.cn就会走到sekiro服务器上

浏览器调用接口

js_RPC,sekiro框架,实现HTTPS通讯_第12张图片

 测试成功!!!!

(2)sekiro和浏览器不在同一台电脑

sekiro启动成功之后,wss从客户端和服务端建立连接的时候,连接可以写域名或者服务器的ip地址,如var client = new SekiroClient("wss://192.168.126.131:5612/business/register?group=ws-group&clientId=xxxxx");或者var client = new SekiroClient("wss://sekiro.licdn.com:5612//business/register?group=ws-group&clientId=xxxxx");要保证的是电脑得配置hosts

js_RPC,sekiro框架,实现HTTPS通讯_第13张图片

 这样就可以通过RPC远程调用JS函数,拿到数据,进行访问请求。

js_RPC,sekiro框架,实现HTTPS通讯_第14张图片

 初次接触,写的不对的地方,请大家见谅,部分图片来源网络,如有请权,立即删除。

你可能感兴趣的:(网络爬虫,rpc,网络协议,javascript,网络爬虫,https)