Saber 酱的抱枕

Fly me to the moon

07/7
2017
软件

百度离线宝调用API

百度离线宝是百度推广后台的一个功能,它默认的代码会在网页上生成一个输入电话并拨打的功能。但如果我们想在自己做的按钮上调用它的功能,默认代码就做不到了,我们需要调用它的API JS文件。

如下图的按钮:

api javascrip js 电话 百度 离线宝

代码如下:

<input type="text" name="vtel" id="vtela" value="输入您的电话号码">
<input type="button" name="cbBtn" id="cbBtna" value="点击拨打">
<script>
	// 输出离线宝js文件,注意替换uid为自己后台的id
	document.write('<script data-lxb-uid="百度推广后台userid" data-lxb-gid="" src="http://lxbjs.baidu.com/api/asset/api.js?t='+new Date().getTime()+'" charset="utf-8"></scr'+'ipt>');
	// 通过按钮调用离线宝功能
	$("#cbBtna").click(function () {
		lxb.call($("#vtela").val());
	});
</script>

百度离线宝调用API

07/2
2017
软件

windows+IIS 申请 Let's Encrypt 证书相关记录

https iis Let's Encrypt ssl windows server 教程 证书

因为最近网站搬到了vps上,我也开始考虑申请ssl证书,把网站升级到https。

但是说到证书这一块,就又触及到我的知识盲区了。后来还是找了教程摸索出来的。

申请Let's Encrypt 证书教程:
《windows申请免费SSL证书-Let's Encrypt》
(申请Let's Encrypt 证书有很多不同的途径,使用的工具和步骤也不尽相同,我这个办法好像比较麻烦,不过能对流程有个大致的了解。另外有一些我踩过的坑,我会在文末附加说明)

证书申请完成之后,如何导入到 IIS 以及在网站里绑定,参考下面文章的 IIS 部分:
《IIS部署SSL,.crt .key 的证书》
ps:导入pfx文件的时候密码不用填。

此外还需要将http请求的页面自动跳转到https,参考教程:
《(各种版本) http怎么做自动跳转https?》

我添加了里面的iis的规则,可以正常使用。
Read More →

windows+IIS 申请 Let's Encrypt 证书相关记录

06/29
2017
软件

网站搬家记录

现在的网站:

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

(话说IIS 8.5 比起IIS 6真是方便了太多)

以前我的网站用的是香港的一家虚拟主机,从一开始到现在,三年的时间都是在用那个空间。(主机商是51php,总体上满意,售后服务挺好。以后不用它了,就当做是帮它宣传一下吧)

其实我的网站只占用极少的磁盘空间和数据库空间,只有流量用的多。随着流量逐渐增长,我也不断升级主机套餐,最近又面临不得不升级的情况,我觉得不能再这样继续下去了,正好最近尝试了vultr的vps,所以打算把网站搬到vultr上面去。

本月的主机使用情况:

 Apache iis web.config wordpress 伪静态 教程 经验 网站搬家

其实现在套餐的流量是30GB/月,前几天就用完了,现在的45GB是我让客服临时加了点。虽然我最近做了些优化措施,但预计以后每月流量仍会达到20GB以上,现在这个套餐的流量未来也会不够用。

相比现在的虚拟主机,vultr的vps有诸多优势:
1.价格不贵,5美元/月,一年也就400RMB,和我现在这个虚拟主机套餐差不多是相同价位,但流量上限高得多;
2.vps可直接登陆操作系统,管理网站更为便捷,可以摆脱掉ftp了,对网站的控制也更加随心所以了;
3.避免一些奇葩的事情,比如之前我发现我的主机被禁止google抓取了,后来我找客服解除了限制。
3.vps作为一个操作系统,能做的事情比只能放网站的虚拟主机强多了,最简单的应用就是充当vpn上网。其他的比如架ss什么的我还没研究过。

我原来的虚拟主机的环境是Linux + Apache,但因为我不会linux,所以vultr上我安装的是windows + IIS。这个搬家的过程也踩了不少坑,也记录一下吧。
Read More →

网站搬家记录

06/24
2017
软件

mysql首次安装却需要输入current password的问题

current password mysql 数据库

如果你以前在操作系统上安装过MySQL,那么当你重新安装MySQL时,会要求你先输入旧的密码(current password),才能设定新密码。

但是我刚才在一个新系统上安装MySQL,却也提示我输入current password。一开始我不知道这是什么鬼,随便填了个“root”,结果MySQL安装失败,报错:

Unable to update security settings. Access denied for user 'root'@'localhost' (using password: YES)

百度后发现这个问题在于current password密码不对,可是这个系统上以前根本没有安装过MySQL,怎么会要求输入current password呢?

后来我仔细思索,发现了问题所在。MySQL安装时会让我们选择数据库存放目录,当时我在D盘新建了个“database”文件夹,然后在安装路径里填入这个文件夹。MySQL当时就出现黄色感叹号,提醒:文件夹已存在。

当时觉得没什么,后来一想果然是这个原因。如果数据库目录是个已存在的目录(即使是空的),MySQL也认为以前安装过,就要求输入current password。

那么解决办法呢,有两种方式:
1.删除database文件夹,然后重新安装MySQL,让它自己去建立这个文件夹。
2.current password留空,不填即可。

mysql首次安装却需要输入current password的问题

06/22
2017
学习 软件

自动解除ikanman.com上被屏蔽的漫画的用户脚本

在greasyfork.org上安装本脚本

自动解除ikanman.com上被屏蔽的漫画。当你在ikanman上看漫画时,country会被设置为US,以此解除屏蔽。

被屏蔽的漫画示例:《出包王女Darkness》

ps:本脚本分离自 《仙尊ikanman、omanhua漫画下载器》,如果你安装了这个下载器,就不需要再安装本脚本了。

被屏蔽时:

 cookie ikanman.com javascript js manga UserScript 漫画 用户脚本 解除屏蔽

自动解除屏蔽:

 cookie ikanman.com javascript js manga UserScript 漫画 用户脚本 解除屏蔽

自动解除ikanman.com上被屏蔽的漫画的用户脚本

06/21
2017
软件

在Windows Server 2012 中安装 .NET 3.5 Framework失败的问题及解决办法

今天因为公司业务需要,我去试用一台云主机看看情况。操作系统是Windows Server 2012 ,因为安装IIS8需要一起安装.NET 3.5 Framework ,然而安装失败了,为这个问题折腾了好久。

首先在“添加角色和功能向导”里选择.NET 3.5 Framework:

 .NET 3.5 Framework iis8 sxs Windows Server 2012
Read More →

在Windows Server 2012 中安装 .NET 3.5 Framework失败的问题及解决办法

06/10
2017
软件

TP-LINK R478+路由器设置策略选路

公司最近增加了一条宽带,路由器从单wan口变成了双wan口。有一台服务器(内网固定ip)需要固定走wan2,我记得以前设置过类似的情况,但是设置之后感觉不对,百度到的教程里的界面和我的又不一样,于是我还是打TP-LINK的客服电话问了问,设置如下:

传输控制 → 流量均衡 → 策略选路

TP-LINK R478+路由器设置策略选路

我的需求是设置192.168.1.88走wan2,其他所有ip走wan1。只需要填写源地址范围,然后勾选wan接口,最后新增规则就行了。

先给192.168.1.88建立一条wan2的规则,然后再用四个零(0.0.0.0表示无限制)建立一条wan1的规则。

其实0.0.0.0里包含了192.168.1.88的,嘛,可能指定ip的优先级比默认的四个0优先级高吧。

ps:我之前犯的错就在于把目的地址范围也填了,于是就悲剧了。

TP-LINK R478+路由器设置策略选路

06/7
2017
软件

IIS服务器访问mp4等视频文件时发生404错误

最近一个网站上要放mp4视频,我本地测试时用的是WAMP服务器,没有问题,上线到服务器的IIS6里面之后却发生了错误,视频打不开,状态码404。

奇哉怪也,我再三确认路径没有错,后来搜了一下才知道,IIS里对于不支持的文件类型,要手动添加其MIME信息。

在该网站上右键 → 属性 → HTTP头 → MIME类型,添加.mp4文件的MIME类型即可(video/mp4)。

 404 iis MIME mp4 视频

嗯,箭头就是画的这么奔放。

IIS服务器访问mp4等视频文件时发生404错误

06/1
2017
ACG 软件

推荐一个巧克力与香子兰的miui主题

mimi上有个巧克力与香子兰的主题我用了有一段时间了,做的很精致,而且也超萌~而且居然是免费的,真是太良心啦QAQ

所以今天我就来安利一下,巧克力与香子兰主题 小米主题商店

锁屏:(主题带的锁屏壁纸有多个,这张图是第二个 pid=5123982)

萌 miui主题 NEKOPARA 小米 巧克力与香子兰 手机主题
Read More →

推荐一个巧克力与香子兰的miui主题

05/23
2017
学习 软件

使用GM_xmlhttpRequest设置referer获取文件

说到ajax,不能不提到跨域限制这个问题。与跨域紧密相连的是referer,如果referer相同,就不会触发跨域限制;反之则视为跨域。

但发生跨域时,能否请求到跨域资源,也分两种情况:

第一种:服务器端不检查referer,这时候是否受跨域限制,由浏览器管理。

这时是否触发跨域限制,全由浏览器自己判断。比如在网页上用img标签插入一张跨域的图片,浏览器是不会触发跨域限制的,可以正常加载图片。但用ajax获取的话,浏览器就会触发跨域限制,获取不了。

这时候就算跨域了,服务器也是允许浏览器去下载文件的,只是看浏览器自己愿不愿意。

第二种:服务器端会检查referer,不符合规则的就拒绝。

这时候浏览器就吃瘪了,用img标签来插入图片也不行,这也是通常的防盗链手段。


如果我们在请求头里设置合法的referer,就可以破解跨域限制,但目前运行在浏览器宿主环境内的JavaScript实现不了这个功能,需要交给后台程序来做。如果只为了破解referer就单独做个后台文件,比较麻烦。但是我们使用油猴脚本的话,就不用写后台文件了,比较省事。

油猴脚本管理器(Greasemonkey或Tampermonkey等)由于是浏览器的扩展程序,可以设置请求头,包括伪造referer。它们都封装了一个GM_xmlhttpRequest方法,可以在用户脚本(UserScript)里调用。

今天我进行了测试,确定是可行的。示例代码如下:

// ==UserScript==
// @name        test GM_xmlhttpRequest
// @description test
// @namespace   https://greasyfork.org/ja/users/24052-granony
// @author      me
// @version     0.1
// @include     https://greasyfork.org/*
// @grant       GM_xmlhttpRequest
// @connect     i.pximg.net
// @connect     i1.pixiv.net
// @connect     i2.pixiv.net
// @connect     i3.pixiv.net
// @connect     i4.pixiv.net
// @connect     i5.pixiv.net
// ==/UserScript==

GM_xmlhttpRequest({
	method: "GET",
	url: "https://i.pximg.net/img-original/img/2017/05/16/00/20/10/62921231_p0.png",
	headers: {
		referer: "https://www.pixiv.net/"
	},
	overrideMimeType: "text/plain; charset=x-user-defined",
	onprogress: function(xhr) {
		console.log(xhr.lengthComputable + "," + xhr.loaded + "," + xhr.total);
		//xhr.lengthComputable:布尔值,是否可以获取到文件总长度
		// xhr.loaded:已加载的字节数
		// xhr.total:文件总字节数

	},
	onload: function(xhr) {
		var r = xhr.responseText,
			data = new Uint8Array(r.length),
			i = 0;
		while (i < r.length) {
			data[i] = r.charCodeAt(i);
			i++;
		}
		blob = new Blob([data], {
			type: "image/png"
		});
		var blobURL = window.URL.createObjectURL(blob);
		var downA = document.querySelector("h1 a");
		downA.href = blobURL;
		downA.setAttribute("download", "a.png");
		downA.click();
		window.URL.revokeObjectURL(blobURL);
	}
})

上面代码的功能是下载一个跨域并且服务器设置了referer防盗链的文件,下载后将其转换为blob对象保存到本地。

首先要授予这个脚本调用GM_xmlhttpRequest的权限:

// @grant       GM_xmlhttpRequest

但光这样还不够,还要在@connect里指定跨域获取文件时文件url里的域名。如果文件url的域名没有在@connect里指定,则GM_xmlhttpRequest会报错。

如果跨域文件没有设置referer防盗链,那么到这里就够了,跨域问题会被自动处理(。

但示例代码里的url有防盗链设置,而且比较奇葩,服务器要求的其实是个不同源的referer,同源的referer反而不行。这就需要我们在GM_xmlhttpRequest方法的headers参数里设置合法的referer了:

headers: {
	referer: "https://www.pixiv.net/"
}

其实上面的代码里还有个挺纠结的地方,就是把接收的数据转换为blob对象的过程。

JavaScript原生的XMLHttpRequest对象和jQuery的ajax方法都可以设置把接收的数据自动转换为blob类型,如:

xhr.responseType="blob";

这样拿到的response直接就是blob对象,但这个办法油猴的GM_xmlhttpRequest里测试不行。我见到有的油猴脚本在GM_xmlhttpRequest里设置了:

responseType: "blob",

我试了也不行,不知道人家是怎么用的,反正我这里测试是不行……

后来我在github上找到了一个办法可以把接收的数据转换为blob对象,就是上面代码里用的,看着挺费劲。主要是做了三个工作:

1:请求前设置overrideMimeType;
2:onload之后用Uint8Array和charCodeAt将数据正确的转换为blob对象。

Uint8Array和charCodeAt和这俩我之前完全不认识,看到的时候一脸懵逼:

后来我深入了解了上面步骤的作用:

overrideMimeType告诉服务器需要返回无格式纯文本的mime-type,而不是image/jpeg、image/png等图像格式。

Uint8Array是创建一个指定长度的无符号数组,charCodeAt则用来把response逐字节转换为Unicode编码(response都是string)。

怪不得我之前简单粗暴把response放进数组里转换成的blob对象有问题,还是姿势太低。

其他参考资料:Greasemonkey wiki

使用GM_xmlhttpRequest设置referer获取文件