首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

puppeteer搭建代理转发请求

使用方法 tnpm install -g @ali/tuzki tuzki set -a 你的账号 tuzki set -p 你的密码 tuzki start tuzki set -a --account ,设置域账号-p --passowrd ,设置域账号密码 tuzki config 输出当前配置的域账号和密码 tuzki start 运行代理,默认是 5000 端口,如果你在 start 后指定了一个端口则会在指定端口运行 tuzki start -p 9000 // 在9000端口运行 开发过程 koa Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。当然,这段话是我抄的。https://koa.bootcss.com/ puppeteer Puppeteer是一个Node库,它提供了高级API来通过DevTools协议控制Chrome或Chromium 。当然,这句话也是我抄的。https://github.com/puppeteer/puppeteer。简单的说就是Puppeteer提供了一个可供node环境使用的一个无界面、代码控制的谷歌浏览器。可以通过调用api来实现一个用户可能有的所有操作。说实话我用完以后觉得这个拿来当爬虫用真的杠杠的。。 方案 基本是围绕着怎么生成cookie,怎么请求接口进行。让puppeteer代替用户登陆平台,请求接口,拿到响应以后再用koa响应本地的前端请求。emm,大概就是下面这条线。 代码实现 代码实现思路大致分两部分,第一部分是让koa去识别和响应前端请求,第二部分是puppeteer收到koa拆解出协议和参数后,收发请求。 koa部分 用koa生成一个http server,开始监听某个端口的请求。这里使用了koa-log4帮助记录日志。 const Koa = require("koa"); const log4js = require("koa-log4"); const logger = log4js.getLogger("app"); const { PORT } = require("./config"); require("../log"); const bodyParser = require("koa-bodyparser"); const { instance: lubanProxy } = require("./lubanProxy"); async function server() { // init app & proxy const app = new Koa(); app.use(bodyParser()); app.use(log4js.koaLogger(log4js.getLogger("http"), { level: "auto" })); await lubanProxy.loginLuban(); // add logger to a request app.use(async (ctx, next) => { const start = new Date(); await next(); const ms = new Date() - start; logger.info(`${start} ${ctx.method} ${ctx.url} - ${ms}ms`); }); // send request to lb-test app.use(async ctx => { if (ctx.method === "GET") { let res = await lubanProxy.get(ctx.url); ctx.body = res; } else if (ctx.method === "POST") { let res = await lubanProxy.post(ctx.url, ctx.request.body); ctx.body = res; } }); app.on("error", (err, ctx) => { logger.error("server error", err, ctx); }); app.listen(PORT); } server(); puppeteer部分 生成一个浏览器,登陆平台,向koa提供get和post方法。 登陆部分 模拟真实用户的登陆操作即可。 loginLuban = async () => { this.browser = await puppeteer.launch(); const page = await this.browser.newPage(); await page .goto( "https://login.abc.com/login.html“ ) .catch(async e => { await page.waitFor(2000); logger.error(`load login page timeout,retrying...`); }); await page .evaluate(() => { document.querySelector("input[name='account']").focus(); }) .catch(async _ => { logger.error(`Cannot get login form`); }); await page.keyboard.type(ACCOUNT); await page .evaluate(() => { document.querySelector("input[name='password']").focus(); }) .catch(async _ => { logger.error(`Cannot get login form`); }); await page.keyboard.type(PASSWORD); await Promise.all([page.waitForNavigation(), page.click(".submit")]) .then(async () => { await page.goto("http://luban.abc.net/manage.htm"); console.log("proxy ready..."); }) .catch(async _ => { logger.error( `Navigation timeout of 30000 ms exceeded,restarting browser...` ); await this.restartBrowser(); }); }; get请求 puppeteer只能用来模拟用户操作,无法自如的发送ajax,所以get请求的思路是用page.goto来模拟。 get = async url => { const page = await this.browser.newPage(); let res = ""; await page .goto("http://luban.abc.net" + url) .then(async () => { res = await page.content(); res = res.slice(res.indexOf("{"), res.lastIndexOf("}") + 1); }) .catch(_ => { logger.error(`get request got net::ERR_CONNECTION_RESET error`); res = { code: -1, message: "Got a net error, try again?" }; }); await page.close(); return res; }; post请求 post请求比get复杂一些,因为get可以通过页面跳转,而post无法模拟。 /** * 用注入一段js的方式发送post请求 * 打开lb-test jarvis的index页面,同时注入一段js代码,将参数填充进js代码段中, * 将接口返回的内容写入div#root的innerHTML中,wait()接口请求时间后,获取div#root的innerHTML即为接口返回内容。 * 为每个请求单独开辟一个标签页,防止上一个请求没结束时即被新的请求覆盖, * 当请求结束时主动关闭标签页,释放占用的内存 * 若此过程成功,则返回json字符串,若失败,返回失败原因 * @param {string} url 请求的地址 * @param {object} param 请求的参数 * @return {string} json字符串 */ post = async (url, param) => { const page = await this.browser.newPage(); let res = ""; await page.goto( "http://lb-test.alibaba.net/project/jarvis/page/index.html" ); await page.addScriptTag({ content: ` $.post('http://lb-test.alibaba.net'+'${url}', {data: ${JSON.stringify( param.data )}}, function (result) { document.querySelector('#root').innerHTML = JSON.stringify(result) });` }); await page.waitFor(500); res = await page.evaluate(() => { return document.querySelector("#root").innerHTML; }); await page.close(); return res; };

优秀的个人博客,低调大师

ubuntu golang vscode环境搭建

安装golang # 到官网下载二进制包https://golang.org/dl/ 或者 https://studygolang.com/dl # 解压包 tar -xvf go1.12.9.linux-amd64.tar.gz # 移动到正常目录下 sudo mv go /usr/local/ # 添加环境变量, 配置代理, 启用gomod sudo vim /etc/profile.d/golang.sh export PATH=$PATH:/usr/local/go/bin export GO111MODULE=on export GOPROXY=https://goproxy.io # 加载环境变量 source /etc/profile.d/golang.sh # 测试安装 go version 安装vscode 到官网下载vscode https://code.visualstudio.com/下载deb包双击安装或者dpkg -i 安装即可 安装vscode 的go插件 安装其他工具 如果因为墙原因无法安装,请翻墙,或者手动安装https://github.com/Microsoft/vscode-go/wiki/Go-tools-that-the-Go-extension-depends-on安装日志Installing github.com/mdempsky/gocode SUCCEEDEDInstalling github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDEDInstalling github.com/ramya-rao-a/go-outline SUCCEEDEDInstalling github.com/acroca/go-symbols SUCCEEDEDInstalling golang.org/x/tools/cmd/guru SUCCEEDEDInstalling golang.org/x/tools/cmd/gorename SUCCEEDEDInstalling github.com/go-delve/delve/cmd/dlv SUCCEEDEDInstalling github.com/stamblerre/gocode SUCCEEDEDInstalling github.com/rogpeppe/godef SUCCEEDEDInstalling github.com/sqs/goreturns SUCCEEDEDInstalling golang.org/x/lint/golint SUCCEEDEDInstalling github.com/cweill/gotests/... SUCCEEDEDInstalling github.com/fatih/gomodifytags SUCCEEDEDInstalling github.com/josharian/impl SUCCEEDEDInstalling github.com/davidrjenni/reftools/cmd/fillstruct SUCCEEDEDInstalling github.com/haya14busa/goplay/cmd/goplay SUCCEEDEDInstalling github.com/godoctor/godoctor SUCCEEDED 配置vscode { "files.autoSave": "afterDelay", "go.buildOnSave": "workspace", "go.lintOnSave": "package", "go.vetOnSave": "package", "go.formatTool": "goreturns", "go.goroot": "/usr/local/go", "go.useLanguageServer": true, "go.alternateTools": { "go-langserver": "gopls", }, "go.languageServerExperimentalFeatures": { "format": true, "autoComplete": true }, "[go]": { "editor.codeActionsOnSave": { "source.organizeImports": true }, } }

优秀的个人博客,低调大师

hadoop搭建之hive安装

本文hive安装环境系统:centos6.9jdk:jdk1.8.0_201hadoop:hadoop-2.7.2HBase:hbase-1.2.4 zookeeper:zookeeper-3.4.9mysql:mysql-server hive安装版本:apache-hive-2.1.1 mysql数据库连接安装包mysql-connector-java-5.1.44-bin.jar 1、下载安装包apache-hive-2.1.1-bin.tar.gz 2、将下载的安装包上传到centos6.9b并解压,重新命名为hive 3、配置环境变量(在root下) 输入命令vi /ect/profile # Hive environment export HIVE_HOME=/opt/modules/hive export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH 4、source /etc/profile 生效环境变量 5、将mysql连接安装包mysql-connector-java-5.1.44-bin.jar放到hive中的lib文件下 5、修改hive配置文件,切换至目录cd /opt/modules/hive/conf,把初始化文件复制一份并改名 cp hive-env.sh.template hive-env.sh cp hive-default.xml.template hive-site.xml cp hive-log4j2.properties.template hive-log4j2.properties cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties 6、新建hive在hdfs的缓存目录(配置文件会用到) hadoop fs -mkdir hbase hadoop fs -mkdir hbase/temp 7、在hive目录下,建立temp文件夹(配置文件会用到) 8、修改hive-env.sh #hadoop这里根据你的地址 export HADOOP_HOME=/opt/modules/hadoop export HIVE_CONF_DIR=/opt/modules/hive/conf export HIVE_HOME=/opt/modules/hive export HIVE_AUX_JARS_PATH=/opt/modules/hive/lib 9、在mysql数据库中新建hive数据库 10、修改hive-site.xml(文件信息比较多,用Ctrl搜索name值,修改value值即可) 配置数据库 <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://主机名:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value> </property> #配置连接驱动 <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> #配置数据库用户名 <property> <name>javax.jdo.option.ConnectionUserName</name> <value>用户名</value> </property> #配置数据库密码 <property> <name>javax.jdo.option.ConnectionPassword</name> <value>密码</value> </property> #配置缓存目录: <property> <name>hive.metastore.warehouse.dir</name> #刚才创建的第一个 <value>/hbase</value> <description> location of default database for the warehouse </description> </property> <property> <name>hive.exec.scratchdir</name> #刚才建的第二个目录 <value>/hbase/temp</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description> </property> #配置刚才在hive建的temp文件 <property> <name>hive.querylog.location</name> <value>/opt/modules/hive/tmp${user.name}</value> <description>Location of Hive run time structured log file</description> </property> 在配置文件 hive-site.xml 里面把 {system:java.io.tmpdir} 改成 /opt/modules/hive/temp 把 {system:user.name} 改成 {user.name} 11、初始化hive,输入命令 schematool -initSchema -dbType mysql 初始化成功会有以下提示Starting metastore schema initialization to 2.1.0Initialization script hive-schema-2.1.0.derby.sqlInitialization script completed 12、输入命令hive,进入hive进行测试 总结:最近在学习配置的时候,对于路径的理解不是很深入,总是会出现大大小小的问题,经过练习,对于路径能熟悉很多,大多数的事情都是从不熟悉到熟悉,慢慢坚持

优秀的个人博客,低调大师

一秒搭建gitbook

gitbook docker 镜像 为gitbook docker镜像 效果图 效果如下图所示 使用说明 环境准备 需要docker环境。 使用步骤 第一种 请先frok本项目 frok完成以后,登录主机,输入如下命令,项目拉取下来 git clone [您的frok项目地址]; 进行本地构建,输入如下代码 sudo docker build ./ -t gitbook:vo 运行该镜像 sudo docker run -p 4000:4000 gitbook:vo 访问地址 http://[服务器ip]:4000/ 使用自动化工具进行构建(推荐) 推荐使用自动化构建工具,在本地自动化构建推荐的工具有 docker hub https://cloud.docker.com/travis-ci https://travis-ci.orgdaocloud https://dashboard.daocloud.io 日常使用 当自动化构建完成以后,日常使用如下 本地clone项目 git clone [您的github地址] 在work目录下进行编辑使用详见gitbook的使用教程 栗子 已经有一个已经部署好的啦。访问http://test.iming.info/ github地址 https://github.com/mySoul8012/gitbook_docker

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册