Tag - 刘迎光

go golang 重定向 http 刘迎光 狐刺科技    2019-05-15 09:45:23    4882

原因

  1. 爬虫获取百度查询结果的时候,为了获取网页真实地址,而百度跳转页面的其中一种方式就是302重定向(redirect),那么针对这种方式,go语言默认自动执行redirect的,所以没办法使用get请求获取真实地址
  2. 对于第一条描述的,在302重定向的时候,真实地址在response的location中
  3. go语言中,默认是支持10层redirect,所以,除非跳出,否则会redirect 到第10层才退出,然而也是可以自定义的

自定义redirect规则示例

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "errors"
  6. )
  7. func main() {
  8. url:="https://www.baidu.com/link?url=IIZcBDQ9FSkK8wRluFkNAxjf4a7VDwHH0kFqGazjEAFGRDdnxe0HqQRdSocksxbbrpMjo7PTBeGjgnmf0aYOqN7ld6dXDBVO_jMYS16Yuy7CI5M_TMysMLpmFhF4CEjGjXOEYvjL_r9Hgz2-4jwsoa"
  9. client := &http.Client{
  10. CheckRedirect: myCheckRedirect,
  11. }
  12. req, err := http.NewRequest("GET", url, nil)
  13. if err != nil{
  14. }
  15. resp, err := client.Do(req)
  16. if err != nil{
  17. }
  18. fmt.Println(resp.Status)
  19. respUrl,err := resp.Location()
  20. if err != nil{
  21. }
  22. fmt.Println(respUrl.String())
  23. }
  24. func myCheckRedirect(req *http.Request, via []*http.Request) error {
  25. //自用,将url根据需求进行组合
  26. if len(via) >= 1 {
  27. retu
referrer http 百度统计 刘迎光 狐刺科技    2019-05-03 01:42:43    515

具体情况

title

原因

html代码中,Referrer设置不对,比如我的代码中,是这样的:

  1. <meta name='referrer' content="never">

关于 referrer

referrer 网站来路;访问者进入网站任何途径。HTTP Referer 是header的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer,告诉服务器用户从那个页面连接过来的,服务器藉此可以获得一些信息用语处理。

referrer 用来判断网站来源,可以相应的做一些校验,比如只允许某网站的请求,那么就可以通过获取referer,加以判断即可。

对于 referrer,有两篇文章可以参考:
使用 Referer Meta 标签控制 referer—详解 referrer-policy
HTTP首部---referrer 知识点

问题分析

百度站长是有分析受访页面、来源网站、入口页面等等,都是需要Referrer的配置
title
而我的代码中,将 referrer 设置为了 never,与现在流行的“referrer policy”值“no-referrer”的效果一致

解决办法

根据需要,设置 referrer 值为合适的值(参考上面相关文章)或者直接删除关于 referrer 的设置,使用默认值“no-referrer-when-downgrade”


by 刘迎光@狐刺科技
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.liuyingguang.cn/
OpenBI问答社区:http://www.openbi.tk/

win7 VPN Routing and Remote Access 刘迎光 狐刺科技    2019-04-18 00:53:43    857
先来看看配置好以后的样子
起初,我们的机器中,上图的第二个连接是不存在的,是配置好以后才出现的。

网上有人给出其他的解决方案,就是点击图中的"文件"-->"新建传入连接"
可是问题来了,这里我们做不到啊,因为我们没有这个文件菜单,参考第一个图
如果你有这个选项,可以直接参考链接:https://blog.csdn.net/guo_guo_cai/article/details/78399925
好了,不啰嗦了,直接切入正题,看如何解决这个问题

一、打开服务管理器(win+r,输入services.msc),并找到服务“Routing and Remote Access”,开启即可
注:1. 这个服务默认在win7 中是被禁用的,要改为自动,并启用
2. 这个服务目前测试在win7旗舰版中是存在的,其他版本没有测试
二、重新打开“控制面板\网络和 Internet\网络连接”,在其中找到新出现的连接,即我们第一张图中的第二个连接
1. 设置可以连入,在“常规”项目下,“虚拟专用网络”中勾选上
2. 设置用户,在“用户”项目下,可以选择允许连接的用户,也可以新建用户等
三、打开防火墙中的1723端口,这里就不多说了,自行理解

到这里,就算是完全配置成了,找另外一台机器测试下吧
 
 
by 刘迎光@狐刺科技 
OpenBI交流群:495266201 
MicroService 微服务交流群:217722918 
mail: liuyg#liuyingguang.cn 
博主首页(==防止爬虫==):http://blog.liuyingguang.cn 
OpenBI问答社区:http://www.openbi.tk/

nexus maven nexus3 刘迎光 狐刺科技    2019-04-18 00:52:45    894

错误日志

  1. Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file /nexus-data/log/jvm.log due to Permission denied
  2. Warning: Cannot open log file: /nexus-data/log/jvm.log
  3. Warning: Forcing option -XX:LogFile=/tmp/jvm.log
  4. Unable to delete file: /nexus-data/cache/cache.lock
  5. Unable to update instance pid: /nexus-data/instances/instance.properties (Permission denied)
  6. Exception in thread "Thread-2" java.lang.SecurityException: Could not lock User prefs. Lock file access denied.
  7. at java.util.prefs.FileSystemPreferences.checkLockFile0ErrorCode(FileSystemPreferences.java:937)
  8. at java.util.prefs.FileSystemPreferences.lockFile(FileSystemPreferences.java:925)
  9. at java.util.prefs.FileSystemPreferences.sync(FileSystemPreferences.java:729)
  10. at java.util.prefs.FileSystemPreferences.flush(FileSystemPreferences.java:824)
  11. at java.util.prefs.FileSystemPreferences.syncWorld(FileSystemPreferences.java:464)
  12. at j
数据库 DB 版本管理 刘迎光 狐刺科技    2017-03-26 11:28:27    880

概述

软件开发过程中,往往会遇到版本管理问题,也常常会遇到服务多版本管理问题,也常常会遇到不同版本的服务之间,数据库字段不同、建表语句不同的问题,那么如何在不同版本间进行平滑升级,那么就需要有一系列的规范(暂不涉及回退方案):

升级步骤

自动化管理,由程序在启动前操作:

  1. 检查数据库中的当前版本,检查程序版本(version.properties中)
  2. 检查与当前版本相关联的升级脚本(这一步骤依赖于与数据库版本相对应的文件命名规范)
  3. 如果找到了文件,则执行文件内容并验证输出,如果出现错误则退出,抛出异常
  4. 如果没有发现脚本,则直接退出,抛出异常
  5. 重复步骤1

注意事项

  1. 版本控制:数据库中存在db_schema_version表,用来管理当前所有应用实例的版本信息,每个项目中,都应包含一个version的描述文件(version.properties),有版本变动,即修改其版本信息,db_schema_version表结构见第6条
  2. 版本号控制:<主版本号>.<子版本号>.<修订号>
    第一部分在系统的重要发布或重大阶段会进行改变,比如每几个月一次。下面两部分是由开发者控制的。子版本改变意味着数据库中加入了破坏性的改动(例如新的必需字段),这使得“旧的”应用程序与新的数据库架构不再兼容。修订号则是每次非破坏性的变动发生时(例如新的索引、新表、新的可选字段等等)进行递增的。每次上级版本号更新,下级版本号默认清零
  3. 更新脚本:
    由开发者进行编写的数据库更新脚本,此脚本中包含多个更新数据库的语句,使用英文分号分隔(标准的数据库语句写法),不必特意使用事务脚本,java程序会将每一个更新脚本文件当做一个事务来处理。
    添加注释需要使用“ /注释/ ”方式来写
  4. 更新脚本文件命名规范:
    为文件名称使用以下格式
    <前缀><数据库版本表中的当前版本号><目标版本号>_<有关升级的其它信息>.sql,
    例如:report_1.0.1_1.0.2_rename_column.sql
    目前,前缀我们默认使用产品名称来描述,用来和每个项目中配置文件中的product_name对应
    5、记录应用升级脚本的历史,db_version_h
1/2