Tag - http

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

原因

  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    408

具体情况

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/

微服务 MicroService nodejs http 反向代理    2017-07-19 20:20:45    704

最近在做微服务相关产品,其中需要有API网关相关产品,虽然早有研究过API网关产品TYK,但是感觉其太重,想起之前研究开源BI产品saiku的时候,记得其有NodeJS的代理代码,于是看了下,颇有启发,略微修改了一些,拿出来跟大家分享下,虽然简单,不可用于生产,但是对于学习还是不错的

package.json

  1. {
  2. "name": "SmartHttpProxy",
  3. "description": "An simplest Http Proxy",
  4. "version": "0.0.1",
  5. "author": "liuyg@liuyingguang.cn",
  6. "license": {
  7. "type": "Apache License Version 2"
  8. },
  9. "main": "server.js",
  10. "scripts": {
  11. "start": "node server.js 8088 127.0.0.1 80 / "
  12. },
  13. "dependencies": {
  14. "express": "~4.13.4"
  15. }
  16. }

server.js

  1. /*
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either e
nodejs http socket hang up body-parser    2017-07-19 20:16:57    742

错误信息:ERROR: { [Error: socket hang up] code: 'ECONNRESET' }

分析原因:由于某种原因,导致http目标地址建立socket连接的时候出错

错误解决:经过对比查找,发现我这里nodejs项目中有对中间件“body-parser”的使用,将其去除,则没有问题了

还有其他一些原因,这里暂时没有遇到,就不多做解释了,