使用代理访问数据资源

引言

在工作学习中,有时候需要从互联网获取数据资源,但是由于各种原因,可能无法直接在本地的网络直接获取到这些资源。一种常用的解决方案就是通过代理进行获取,本文主要讲述使用代理获取网络资源的通俗原理和方法。

代理概述

在网络中,代理(Proxy)就是指客户端通过代理服务器访问目标服务端的过程。代理服务器在实际应用中发挥着极其重要的作用,它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能【代理服务器-百科 】。那么在这里,我们使用代理的主要目的则是为了提升数据资源获取效率。

从代理服务器工作的层次的角度来说可以分为应用层代理(如http代理)、传输层代理和SOCKS代理。SOCKS代理采用socks协议,是一种通用的代理服务器,目前有两个版本的Socks协议,socks4和socks5。socks不要求应用程序遵循特定的操作系统平台,socks代理与应用层代理不同,socks代理只是简单地传递数据包,而不必关心是何种应用协议【socks5和http代理的区别 】。而http代理只能在http协议下进行代理服务,主要用于网页数据资源访问。

代理实现

代理服务器和配置

要实现代理,首先需要一台代理服务器。本文的需求是,通过代理去获取正常情况下无法获取或者获取效率低的网络资源。那么,我们对代理服务器的要求就是,客户端能够高速连接代理服务器,服务器也能够高速连接目标服务端。这样才能保证我们通过代理高效获取目标服务端的数据资源。代理服务器一般从各云服务器厂商购买,比如国内的阿里云、腾讯云、百度云等,国外的VULTR、AWS等。

有了服务器之后,就需要在服务器上搭建代理环境,比如通过ShadowSocks和V2ray(推荐)。V2ray服务器端部署和客户端(支持多种平台)使用教程:一键部署V2ray和客户端使用

客户端使用

下载对应的客户端,输入服务器端的配置信息即可。还是以V2ray为例进行说明。 对于Windows/MacOS/Andriod等有图形界面的V2ray客户端,输入配置文件后,就会同时产生socks5代理和http代理。而对于linux,v2ray只有socks5代理,需要通过Privoxy软件转发得到http代理(教程1教程2 )。

一般情况下,我们要获取的数据资源一般以http协议或ftp协议传输,如果是http协议,使用http代理即可下载,如果是ftp协议,则要用socks代理。下面介绍windows,linux平台以及使用python通过V2ray代理下载http协议和ftp协议数据的方法。

Windows 平台

  1. http协议:直接浏览器下载。
  2. ftp协议:使用支持socks5代理的ftp客户端(如Filezilla)下载。(Filezilla使用代理下载数据教程:【编辑】-【设置】-【通用代理】,选中socks5,填入代理配置:默认地址:127.0.0.1,端口2333)。

Linux 平台

无论是http协议还是ftp协议,都可以通过curl来下载,curl使用socks5代理的方法:

1
curl -O --socks5-hostname 127.0.0.1:2333 <URL>

wget不支持socks5协议,无法通过代理下载ftp资源,不推荐。curl和wget使用和区别:curl教程区别

Python

使用Python下载,可以设置全局socks5代理,同样可以支持ftp和http协议。python设置全局socks5代理代码:

1
2
3
4
5
6
7
import socket
import socks

SOCKS5_PROXY_HOST = '127.0.0.1' # socks 代理IP地址
SOCKS5_PROXY_PORT = 2333 # socks 代理本地端口
socks.set_default_proxy(socks.SOCKS5, SOCKS5_PROXY_HOST, SOCKS5_PROXY_PORT)
socket.socket = socks.socksocket

环境Python3.6,依赖包:PySocks