91HTTP代理是91VPS旗下HTTP代理子品牌,現(xiàn)全新升級,官方網(wǎng)址:www.91http.com
怎么使用動態(tài)撥號vps代理服務(wù)器搭建HTTP代理ip?今天小編給大家做個詳細的教程:
關(guān)于動態(tài)撥號vps代理服務(wù)器搭建HTTP代理ip的流程分為以下幾步:
第一步:購買動態(tài)撥號vps服務(wù)器;
第二步:連接動態(tài)撥號vps服務(wù)器,撥號成功后,安裝必要的軟件;
第三步:安裝及啟動TinyProxy搭建代理;
第四步:安裝python/編寫HTTP代理池腳本;
第五步:提取ip,測試,搭建完成,投入使用。
一,購買動態(tài)撥號vps代理服務(wù)器
首先,確認自己需要的動態(tài)撥號vps服務(wù)器類型:目前91vps提供有撥號vps服務(wù)器和動態(tài)ECS服務(wù)器二種,均包含有全國混播/單地區(qū),然后在選擇配置,目前91vps提供有4種類型的配置可供選擇;最后確認購買,購買完成。(關(guān)于機器的選擇,可根據(jù)自己的需求來,如不清楚,可聯(lián)系91vps在線客服:800193021咨詢推薦)
點擊直達:91vps動態(tài)撥號vps服務(wù)器購買地址
點擊查看:91VPS動態(tài)撥號VPS服務(wù)器購買開通教程
二 遠程連接撥號vps服務(wù)器,并調(diào)試成功
這里就不多做介紹了,需要強調(diào)一點的是,搭建http代理,必須使用liunx系統(tǒng)連接,所以,這個直接提供liunx系統(tǒng)連接的詳細教程:
點擊查看:動態(tài)撥號vps服務(wù)器lunix使用教程
三 TinyProxy代理搭建
1.安裝TinyProxy
yum install -y epel-release
yum update -y ——升級yum,可能會等很長一段時間
yum install -y tinyproxy
2.配置TinyProxy
(1)vi /etc/tinyproxy/tinyproxy.conf修改兩處配置:端口號和允許連接該代理的IP白名單:
上圖中,默認用8888端口作為代理端口,可以修改為你用作代理端口的端口號;
允許訪問該代理端口的IP,默認為只有本機可以使用該代理,把這行注釋掉可以使所有IP都可以使用該代理。
(2)配置完后,重啟TinyProxy
systemctl enable tinyproxy.service
systemctl restart tinyproxy.service
防火墻開放你的配置的代理端口:
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
3.驗證TinyProxy
在另一臺主機上運行以下命令檢查是否用了代理:
curl -x 代理服務(wù)器IP地址:代理端口 httpbin.org/get
上圖中訪問httpbin.org/get得到本地IP為119.23.xx.x,通過代理端口訪問該地址,得到的IP地址為114.104.xx.x,這說明代理搭建成功。
四 安裝python及編寫腳本
1.安裝python
下面是我的安裝腳本,我每次都是直接用這個腳本來自動安裝。
#!/usr/bin/env bash
yum -y install wget zlib zlib-devel openssl-devel gcc make
wget -P /usr/local/src/ https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar -xzvf /usr/local/src/Python-3.6.5.tgz
cd Python-3.6.5
./configure --prefix=/usr/local --with-ssl
make
make altinstall
make clean
cd ../
rm -rf Python-3.6.5*
ln -s /usr/local/bin/python3.6 /usr/bin/python3
ln -s /usr/local/bin/pip3.6 /usr/bin/pip3
pip3 install --upgrade pip
python3 -V && pip3 -V
2.編寫更新代理的腳本
由于ADSL撥號服務(wù)器撥號后,IP已經(jīng)變化為新的IP,這時候要通知其他使用IP者新的IP地址是什么,這就需要有一個接口或者緩存供其調(diào)用、存儲變化后的IP。我這里采用redis來緩存。
import re, time, requests
from requests.exceptions import ConnectionError, ReadTimeout
# coding=utf-8
# 撥號間隔
ADSL_CYCLE = 60*60*2
# 撥號出錯重試間隔
ADSL_ERROR_CYCLE = 5
# ADSL命令
ADSL_BASH = '/sbin/ifdown ppp0;/sbin/ifup ppp0'
# 代理運行端口
PROXY_PORT = 8888
# 撥號網(wǎng)卡
ADSL_IFNAME = 'ppp0'
# 代理池鍵名
PROXY_KEY = 'adsl'
# 測試URL
TEST_URL = 'http://www.baidu.com'
# 測試超時時間
TEST_TIMEOUT = 20
# API端口
API_PORT = 8000
# coding=utf-8
import re
import time
import requests
from requests.exceptions import ConnectionError, ReadTimeout
from redis import StrictRedis
import platform
if platform.python_version().startswith('2.'):
import commands as subprocess
elif platform.python_version().startswith('3.'):
import subprocess
else:
raise ValueError('python version must be 2 or 3')
class Sender():
def get_ip(self, ifname=ADSL_IFNAME):
"""
獲取本機IP
:param ifname: 網(wǎng)卡名稱
:return:
"""
(status, output) = subprocess.getstatusoutput('ifconfig')
if status == 0:
pattern = re.compile(ifname + '.*?inet.*?(\d+\.\d+\.\d+\.\d+).*?netmask', re.S)
result = re.search(pattern, output)
if result:
ip = result.group(1)
return ip
def test_proxy(self, proxy):
"""
測試代理
:param proxy: 代理
:return: 測試結(jié)果
"""
try:
response = requests.get(TEST_URL, proxies={
'http': 'http://' + proxy,
'https': 'https://' + proxy
}, timeout=TEST_TIMEOUT)
if response.status_code == 200:
return True
except (ConnectionError, ReadTimeout):
return False
def remove_proxy(self):
"""
移除代理
:return: None
"""
redis = StrictRedis(host='xxx.xx.xx.x', port=26379, password='xxxxxx', db=0)
redis.hdel('proxy', PROXY_KEY)
print('Successfully Removed Proxy')
def set_proxy(self, proxy):
"""
設(shè)置代理
:param proxy: 代理
:return: None
"""
rediscli = StrictRedis(host='xxx.xx.xx.x', port=26379, password='xxxxxx', db=0)
if rediscli.hset('proxy', PROXY_KEY, proxy):
print('Successfully Set Proxy', proxy)
def adsl(self):
"""
撥號主進程
:return: None
"""
while True:
print('ADSL Start, Remove Proxy, Please wait')
try:
self.remove_proxy()
except:
pass
(status, output) = subprocess.getstatusoutput(ADSL_BASH)
if status == 0:
print('ADSL Successfully')
ip = self.get_ip()
if ip:
print('Now IP', ip)
print('Testing Proxy, Please Wait')
proxy = '{ip}:{port}'.format(ip=ip, port=PROXY_PORT)
if self.test_proxy(proxy):
print('Valid Proxy')
self.set_proxy(proxy)
print('Sleeping')
time.sleep(ADSL_CYCLE)
else:
print('Invalid Proxy')
else:
print('Get IP Failed, Re Dialing')
time.sleep(ADSL_ERROR_CYCLE)
else:
print('ADSL Failed, Please Check')
time.sleep(ADSL_ERROR_CYCLE)
if __name__ == '__main__':
sender = Sender()
sender.adsl()
3.代理池中的代理檢查
打開redsi可以看到對應(yīng)的db中已經(jīng)有相應(yīng)的代理。