主要探究 1. 使用代理请求 2. 跳过https不安全验证 3. 自定义请求头User-Agent的实现
主要研究的技术点
- 使用代理请求
- 跳过https不安全验证
- 自定义请求头 User-Agent
静态数据请求并设置代理
实例代码
1 | package main |
相关参考
- Mocking a HTTP access with http.Transport in Golang - oinume journal
- Go http访问使用代理
- GO HTTP client客户端使用 - 海运的博客
- Making Tor HTTP Requests with Go | DevDungeon
- go - golang: How to do a https request with proxy - Stack Overflow
- go - Set UserAgent in http request - Stack Overflow
动态数据请求并设置代理
动态数据请求使用golang调用phantomjs来请求网页数据内容实现。
通过命令参数方式:
1 | phantomjs [options] somescript.js [arg1 [arg2 [...]]] |
代理相关的配置参数:
--load-images=[true|false]
(default istrue
)--proxy=address:port
(eg--proxy=192.168.1.42:8080
)--proxy-type=[http|socks5|none]
(default ishttp
)--proxy-auth
(eg--proxy-auth=username:password
)
其他常用配置参数:
--load-images=[yes|no]
Load all inlined images (default is ‘yes’).--load-plugins=[yes|no]
Load all plugins (i.e. ‘Flash’, ‘Silverlight’, …) (default is ‘no’).--proxy=address:port
Set the network proxy.--disk-cache=[yes|no]
Enable disk cache (at desktop services cache storage location, default is ‘no’).--ignore-ssl-errors=[yes|no]
Ignore SSL errors (i.e. expired or self-signed certificate errors).
也可以通过配置文件方式来设置:
1 | phantomjs --config=/path/to/config.json somescript.js [arg1 [...]] |
常用配置相关参考
实例代码
- 经过测试,发现:
phantomjs --proxy=address:port somescript.js [args]
这种方式无法执行成功。 - 经过测试,发现:在
somescript.js
中设置page.setProxy("http://119.5.0.75:808/");
这种方式也无效。 - 经过测试,发现:在
somescript.js
中设置phantom.setProxy("139.224.237.33", "8888", 'manual', '', '');
这种方式可行。
不使用代理的动态数据请求
dynamicproxy.go
:
1 | package main |
somescript.js
:
1 | var page =require('webpage').create(); |
使用http代理的动态数据请求
dynamicproxy.go
:
1 | package main |
somescript.js
:
1 | var page =require('webpage').create(); |
说明:phantom.setProxy("139.224.237.33", "8888", 'manual', '', '');
参数1为代理host;参数2为代理port;参数3可以保持默认定值manual
,参数4为代理类型http socket5等可为空;参数5不知道为空。
忽略https安全验证的动态数据请求
- 暂时只找到一种方法,直接请求https网址不使用代理能够请求成功。
- 即忽略https安全验证,又使用代理经测试请求失败。
- 直接在命令窗口中执行可以,通过golang调用请求失败。
使用参数:--ignore-ssl-errors=true --ssl-protocol=any
设置。
如下方式执行成功,示例代码:
1 | phantomjs.exe --ignore-ssl-errors=true --ssl-protocol=any test.js https://kyfw.12306.cn/otn/ |
test.js
:
1 | var page =require('webpage').create(); |