Hi there 👋

Welcome to my blog

我的项目

Github Project JKooll/Practices

October 12, 2021 · 1 min

Australia driver license

September 15, 2020 · 0 min · Me

使用laravel写爬虫应用

上面这个图是我设计的爬虫架构,这个架构逻辑比较简单。 首先是链接池,链接池存储需要爬取的网页链接,每个链接有当前爬取状态,尝试次数等信息,爬取状态分为:waiting(等待),going(正在进行),success(爬取成功),fail(爬取失败)。链接的默认状态是waiting,当爬虫正在爬取这个链接的内容的时候,链接进入going状态,链接内容爬取成功进入success状态,爬取失败进入fail状态。链接的另一个参数是尝试次数,当链接爬取失败则尝试次数加1并再次进入waiting状态,设定尝试次数阈值,比如设定阈值为3,当尝试次数超过3次,则进入fail状态。 爬虫管理者负责创建爬虫任务,我们可以创建一个task来定期运行爬虫管理者。爬虫管理者从爬虫池中选取一定数量的处于waiting状态的链接,创建爬虫任务。 爬虫任务接受一个目标链接,然后针对链接的格式运行对应的解析器。如果发现新的目标链接,则将新发现的链接放入链接池。这个地方需要注意的是爬虫在请求链接内容的时候,要使用代理,这样可以防止同一个ip频繁请求被封的情况。 刚开始链接池是空的,所以我们需要放入第一个目标链接,这样爬虫会不断的发现新链接,然后将新链接作为目标链接再次爬取内容,如果效果好的话,爬虫会一直运行知道没有新的链接发现未知。 参考 关于 Composer 版本约束表达式的使用

October 4, 2019 · 1 min

Composer 版本号

~1.2 >= 1.2 && < 2.0 ~1.1.15 >=1.1.15 && < 1.2.0 ^1.2 >= 1.2的1.x.x版本 ^0.0.3 >= 0.0.3 && < 0.0.4

September 16, 2019 · 1 min

如何在Ubuntu 16.04上使用Let’s Encrypt保护Apache2

本文主要讲如何在运行Apache作为Web服务器的Ubuntu 16.04服务器上设置Let’s Encrypt的TLS / SSL证书。Web服务器中使用SSL证书来加密服务器和客户端之间的流量,为访问应用程序的用户提供额外的安全性。 让我们的加密提供了一种免费获取和安装可信证书的简便方法。 准备 为了完成本教程,你需要准备: Ubuntu 16.04服务器,非root用户 Apache Web服务器,一个或多个域名通过虚拟主机配置并指定ServerName当你准备好了之后,登录服务器。 第一步 – 安装Let’s Encrypt客户端 通过服务器上运行的客户端软件获取加密证书。官方客户端称为Certbot,其开发人员使用最新版本维护自己的Ubuntu软件存储库。使用此存储库来安装比Ubuntu提供的更新的版本是值得的。首先添加存储库: $ sudo add-apt-repository ppa:certbot/certbot 你需要按ENTER键。然后,更新列表获取最新存储库的包信息: $ sudo apt-get update 最后,使用apt-get命令安装Certbot $ sudo apt-get install python-certbot-apache 现在certbot Let’s Encrypt client可以使用了。 第二步 – 设置SSL证书 使用Certbot为Apache生成SSL证书非常简单。客户端将自动获取并安装新的SSL证书,该证书对作为参数提供的域有效。要执行交互式安装并获取仅涵盖单个域的证书,运行如下命令,其中example.com是您的域: $ sudo certbot --apache -d example.com 如果要安装对多个域名或子域名有效的单个证书,可以将它们作为附加参数传递给该命令。 参数列表中的第一个域名将是Let’s Encrypt用于创建证书的基本域名,因此我们建议您将裸顶级域名作为列表中的第一个,然后是任何其他子域名或别名: $ sudo certbot --apache -d example.com -d www.example.com 在这个例子中,基本域名是example.com。如果您有多个虚拟主机,则应为每个虚拟主机运行一次certbot,以便为每个主机生成新证书。您可以以任何方式跨虚拟主机分发多个域名和子域名。安装依赖项后,将向您提供自定义证书选项的分步指南。系统会要求您提供丢失密钥恢复和通知的电子邮件地址,并且您可以选择启用http和https访问,还是强制所有请求重定向到https。除非您特别需要未加密的http流量,否则通常最安全的是https。安装完成后,您应该能够在/ etc / letsencrypt / live中找到生成的证书文件。 您可以使用以下链接验证SSL证书的状态(不要忘记将example.com替换为您的基本域): https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest 你现在可以使用https前缀访问你的网站了。 第三步 – 验证Certbot自动更新 我们的加密证书只能持续90天。但是,我们安装的certbot软件包通过systemd计时器每天运行两次certbot更新来为我们解决这个问题。在非系统发行版上,此功能由位于/etc/cron....

September 10, 2019 · 1 min

使用javascript获取网站访问者的地理位置

为了某种需求,有时候需要获取网站访问者的地理位置。现在有两种可选的方式: 使用地理位置 API IP 地址查找 Geolocation API 地理位置API是HTML5的一个功能,允许向用户发送请求获取地理位置的提醒,如果用户同意,则可以获取用户地理位置。 显然,如果用户不同意,则不能获取用户的地理位置。 if ("geolocation" in navigator) { // 检查对当前的浏览器geolocation是支持/禁用 navigator.geolocation.getCurrentPosition( function success(position) { // 当获取位置成功时运行此函数 console.log('latitude', position.coords.latitude, 'longitude', position.coords.longitude); }, function error(error_message) { // 当获取位置出现错误时运行此函数 console.error('An error has occured while retrieving location', error_message) } }); } else { // geolocation 不支持 // 通过其他方式获取地理位置 console.log('geolocation is not enabled on this browser') } 缺点:这种方式只在使用https的网站上可以用。不支持IE10及以下,或者 OperaMini。 这种方式只能获取到地理坐标。如果我们想要获取实际对应的地理位置,我们就需要使用 IP 地址查找。 IP 地址查找 IP地址查找包括:IP Geolocation API, IPinfo还有GEOIP DB。这些API提供的数据类型如:JSON, XML 还有 CSV。如果想获取关于这些API的更多知识,可以查看相关文档。 这里我们使用 IP Geolocation API,并且使用jQuery库。...

September 7, 2019 · 2 min

LAMP配置过程

配置LAMP有两种方法:单独下载每个文件,安装; 使用集成包。本文主要讲解第一种方法。 单独下载每个文件,安装 安装apache2 apt-get install apache2 查看apache2是否安装成功 apache2 -v 安装php5/php7 apt-get install php5/php7 查看php是否安装成功 php5/php7 -v 查看apache2中是否有php.load模块 cat /etc/apache2/mods-enabled/{php5.load | php7.load} 如果没有对应php版本的.load,就安装libapache2-mod-php5/libapache2-mod-php7 安装MySQL apt-get install mysql-server 查看MySQL是否安装成功 mysql -V 查看php是否有mysql配置文件 cat /etc/{php5/php7}/conf.d/mysql.ini 如果没有对应php版本的mysql.ini, 就安装php5-mysql/php7-mysql 重启服务 service mysql restart service apache2 restart 使用集成包安装 tasksel install lamp-server

August 24, 2019 · 1 min

如何在Ubuntu 16.04上使用Let’s Encrypt保护Apache2

这篇文章讲解如何在 Ubuntu 上配置 Apache2 虚拟主机。 准备 安装Apache,具体安装过程可以参考这篇文章https://blog.foof.dev/posts/lamp-0 第一步 – 创建目录 第一步是创建一个目录结构,该结构将保存为访问者提供的站点数据。 sudo mkdir -p /var/www/example.com/publish_html sudo mkdir -p /var/www/test.com/publish_html 这里我们设置的域名是example.com和test.com 第二步 – 设置权限 现在我们有了文件的目录结构,但它们归root用户所有。 如果我们希望我们的常规用户能够修改我们的Web目录中的文件,我们可以通过这样做来更改所有权: sudo chown -R $USER:$USER /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/test.com/public_html 当您按“ENTER”时,$ USER变量将获取您当前登录的用户的值。 通过这样做,我们的常规用户现在拥有public_html子目录,我们将存储我们的内容。我们还应该稍微修改我们的权限,以确保允许对一般Web目录及其包含的所有文件和文件夹进行读取访问,以便可以正确地提供页面: sudo chmod -R 755 /var/www 第三步 – 给每个虚拟主机创建演示页面 为example.com创建页面 vim /var/www/example.com/publish_html/index.html 输入以下内容: Success! The example.com virtual host is working! 保存并关闭文件。复制这个文件到text.com目录下: cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html 打开并修改文件: vim /var/www/test.com/public_html/index.html 修改为下面的内容: Success! The test.com virtual host is working!...

August 24, 2019 · 1 min

Stack Overflow上流量最高的5个问题

我根据ahrefs上的数据筛选出Stack Overflow上流量最高的5个问题。这些问题非常受欢迎且具有很高的参考价值。问题排名按照问题所在页面流量从高到低进行。在这篇文章中,我会将问题的原始链接放在它的标题上,如果你想要查看问题原始页面的话,可以点开链接。我会用自己的话简述一遍问题,因为有时候问题作者对问题进行了多次编辑比较混乱,然后我会附上这个问题的最佳回答。 ps:Stack Overflow上的问题和回答大部分都是用英文写出来的,为了方便阅读,我将使用中文进行表述。 排名方法 登录ahrefs网站 点开“Site Explorer页面” 在地址输入框中输入“stackoverflow.com/questions” 点击搜索按钮 在左侧边栏中找到并点击“Top Pages” 国家选择“All countries” “Traffic”从高到低排序 如何创建一个和链接具有一样行为的按钮?(How to create an HTML button that acts like a link?) 流量:37,156 这个问题创建于10年前。问题作者原本是想实现一个点击按钮之后跳转链接的功能,但是作者查看了收到的回答,并没有满足要求的。目前有两种解决方案,第一种是在form标签中嵌套一个button标签,代码如下: <form method="get" action="/page2"> <button type="submit">Continue</button> </form> 但是这个解决方案有一点不完美就是Safair和IE浏览器会在链接后面添加一个问号。第二个解决方案是使用JavaScript: <button onclick="window.location.href='/page2'">Continue</button> 但是这个解决方案需要使用JavaScript,屏幕阅读器不能访问这样的链接。 链接的作用就是跳转到另一个页面。所以问题作者换了一种问法,如何把链接的样式变成像按钮一样。 <a href="https://zhaoshuquan.com" class="button">Go to Google</a> a.button { -webkit-appearance: button; -moz-appearance: button; appearance: button; text-decoration: none; color: initial; } 什么是NullPointer, 怎么修复这个问题?(What is a NullPointerException, and how do I fix it?) Java,流量:32,036...

August 11, 2012 · 2 min