发布于2019-09-04 10:34 阅读(920) 评论(0) 点赞(24) 收藏(1)
我不知道这样的代理服务器的名称是什么,欢迎您修改我的问题标题。
当我在谷歌搜索代理服务器时,很多实现像maproxy或a-python-proxy-in-than-than-100-lines-of-code。那些代理服务器似乎只是要求远程服务器获取某个URL地址。
我想构建一个代理服务器,它包含一个代理池(一个http / https代理列表),只有一个IP地址和一个端口来服务传入的请求。当请求到来时,它会从池中选择一个代理并执行此请求,并返回结果。
例如,我有一个IP'192.168.1.66'的VPS。我在此VPS启动代理服务器,IP为“127.0.0.1”,端口为“8080”。
然后,我可以使用此代理,如下所示。
import requests
url = 'http://www.google.com'
headers = {
...
}
proxies = {
'http': 'http://192.168.1.66:8080'
}
r = requests.get(url, headers=headers, proxies=proxies)
我看到了一些不足之处:
from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys
log.startLogging(sys.stdout)
class ProxyFactory(http.HTTPFactory):
protocol = proxy.Proxy
reactor.listenTCP(8080, ProxyFactory())
reactor.run()
它工作正常,但它很简单,我不知道它是如何工作的,以及如何改进此代码以使用代理池。
来自hidu / proxy-manager,由golang编写。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ client (want visit http://www.baidu.com/) +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| via proxy 127.0.0.1:8090
|
V
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ + proxy pool +
+ proxy manager listen ++++++++++++++++++++++++++++++++++
+ on (127.0.0.1:8090) + http_proxy1,http_proxy2, +
+ + socks5_proxy1,socks5_proxy2 +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
| choose one proxy visit
| www.baidu.com
|
V
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ site:www.baidu.com +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
您的代理池概念并不难实现。如果我理解正确,你想要跟随。
所以,我用Flask和Requests编写了简单的代理服务器。
from flask import Flask, Response
import random
app = Flask(__name__)
@app.route('/p/<path:url>')
def proxy(url):
""" Request to this like /p/www.google.com
"""
url = 'http://{}'.format(url)
r = get_response(url)
return Response(stream_with_context(r.iter_content()),
content_type=r.headers['content-type'])
def get_proxy():
# This is your "Proxy Pool"
proxies = [
'http://proxy-server-1.com',
'http://proxy-server-2.com',
'http://proxy-server-3.com',
]
return random.choice(proxies)
def get_response(target_url):
proxy = get_proxy();
url = "{}/p/{}".format(proxy, target_url)
# Above line will generate like http://proxy-server-1.com/p/www.google.com
return requests.get(url, stream=True)
if __name__ == '__main__':
app.run()
然后,您可以从这里开始改进您的代理服务器。
通用Proxy Pool
,或者Proxy Manager
可以检查其代理的可用性,速度和更多统计信息,并选择最佳代理来发送请求。当然,这个示例只处理简单的请求,并且您可以添加功能句柄请求args,方法,协议。
希望这有用!
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/88625/b84f253c86cffe04889f/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!