我想创建一个可以使用socks5(使用tor)和经典代理的代理,然后我的scraper(casperjs)可以通过它发出请求。
我使用http.NewRequest创建了一个代理,这里是简短的代码:
main(){
...
// struct to initialise the proxy params
P = NewProxy(..)
http.ListenAndServe(":9999", P)
...
}
func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
...
req, err := http.NewRequest("GET", r.URL.String(), nil)
...
}
我需要获取完整的网址才能拨打电话,因为它可以使用http,但对于https我有 www.example.com:443
首先,我使用tcp代理查看:
listener, err := net.Listen("tcp", p.from)
connection, err := listener.Accept()
remote, err := net.Dial("tcp", p.to)
和io.Copy(to, from)
将数据从客户端复制到远程服务器,反之亦然我的代码受this gist by vmihailenco
它适用于http和https,因为听取是在TCP couche但是这个方法的问题我不能使用 socks5 和 http(s)我必须在通话中设置代理的类型
$casperjs --proxy=127.0.0.1:9999 --proxy-type=socks5 bbuy.js
但我需要的是我的代理可以同时发送多个请求,每个请求使用不同的代理。 要做到这一点,我必须修改每个请求的传输
proxyUrl, err := url.Parse("http://proxyIp:proxyPort")
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
这就是为什么我选择使用http.NewRequest并做到这一点我必须得到完整的网址然后我可以打电话
这个问题现在正如我之前所说的,当我的刮刀试图刮取例如 https://example.com?a=1&b=2 我使用的结果r.URL.String()
是 example.com:443 但是如果它是http
网站我得到了完整的网址
解决此问题的任何建议或想法