squid http(s)代理不支持非标准端口网站的代理请求

问题

当我们访问非标准端口的网站时(即HTTP协议下不使用80,HTTPS协议下不使用443),我们的HTTP(s)代理通常会失效并返回403等错误码。

问题现象还原如下:

如上图所示,我访问这个520端口的网站时,挂了代理反而无法请求了。

这时候就有人说了,“是不是你的代理有问题啊?”,本身上述使用的就是商用代理,为了保险起见,我也使用自建代理进行了测试,返回结果如下:

至此,基本确认了问题,要是“有人”还不信,有人可以自己试试~

解决方案

(首先明晰一点:我们的HTTP(s)代理大都是采用squid或类似方案搭建的)

其实从上述已经分析出了问题原因,就是代理导致的。但是我们还是需要盖棺定论一下。于是经过我契而不舍的寻找,找到了这篇squid的官方说明(https://docs.diladele.com/faq/squid/allow_non_standard_port_through_squid.html):

说明和实际Access Denied的现象一致,同时他也给出了解决方案,如果要让你的代理支持非标准的端口,则需要配置你的squid.conf文件如下:

如果我们使用自建代理可以按照上述方案修改配置,但是,当我们使用商业代理时,并不一定能随意的修改这处配置,第三方也并不一定会支持你如此修改。

好消息是,这类问题一般只出现在资源文件的获取,而极少出现在正常数据访问抓取时。(这似乎也能成为避免资源被抓取的反爬虫手段?)