是这样,我为了练手写了一个 Pixiv 爬虫,主体写完以后准备加上 HTTP 代理,然后突然想起前段时间 Pixiv 已经被墙了,不过只是 DNS 污染而已,我本地改了 DNS 所以没问题。 可是当我要使用国内代理的时候,这个墙就会是问题了对吧?所以能否让 Requests 使用本地设置的 DNS 解析,然后再把请求丢给代理呢? 当然也可以用国外的代理,不过感觉要找个能用的国外代理不容易,速度也是问题。。。 或者有其他方法嘛?
是这样,我为了练手写了一个 Pixiv 爬虫,主体写完以后准备加上 HTTP 代理,然后突然想起前段时间 Pixiv 已经被墙了,不过只是 DNS 污染而已,我本地改了 DNS 所以没问题。 可是当我要使用国内代理的时候,这个墙就会是问题了对吧?所以能否让 Requests 使用本地设置的 DNS 解析,然后再把请求丢给代理呢? 当然也可以用国外的代理,不过感觉要找个能用的国外代理不容易,速度也是问题。。。 或者有其他方法嘛?
1
ysc3839 Oct 13, 2017 via Android
可以考虑用 IP 连接,然后设置一下 Host。
|
2
janxin Oct 13, 2017 via iPhone
最简单的方式你改一下 hosts 啊…
|
3
xmcp Oct 13, 2017 |
4
Va1n3R Oct 13, 2017
直接用国外的 VPS,写个爬虫,爬下国外的代理,然后用代理池呗。不一定非要在本机搞呀
|
5
tomczhen Oct 13, 2017 说实话只要和 Web 相关的强烈建议先去看看 HTTP 协议的相关书籍或者 RFC。
域名在 Client 的作用是通过 DNS 解析到 Server 的 IP,但是请求需要在 Host 头中带上域名,实际请求还是发送到 IP 的。 举个例子: GET /foo.php HTTP/1.1 Host: example.com Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* 基于这个过程有两种方法来解决: 第一:基于系统环境解决。 修改本地 Host、指定 DNS 第二:自己构造请求。 这种方法需要可以自定义请求的 Host 头,并且需要自己处理解析这块。可以选择硬编码 IP 或者还是采用第一种方法实现。 可以先使用硬编码 IP 的方式来尝试一下,剩下的就是要确认使用的请求库能否支持自定义 Host 头了。 如果想进一步解决硬编码 IP 的问题,那么就需要一个 DNS 的库来获得正确的解析记录,再来发起请求。 剩下的问题就可能出在 HTTPS 上,因为证书校验是需要靠域名校验的,client 处理的方式细节不同通过 IP 发起请求可能会出现证书校验错误,粗暴的方法就是无视证书错误。 |
7
Kirikora OP |