当前位置:网站首页>Python3 e-learning case 4: writing web proxy
Python3 e-learning case 4: writing web proxy
2020-11-06 01:17:00 【itread01】
Please go to Baidu Encyclopedia for the definition and function of proxy server ~
1. Web Proxy How to realize it
This is based on the previous article “ Write Web Server” It's written , The main logic is shown in the figure below :
What we're going to write is the middle Web Proxy part , When the client to Web Proxy Send a request for access to a web site (Request) When ,Web Proxy You will first check whether you have the requested file , If there is, go straight back to (Response), If not ,Web Proxy It's like Web Server( The server to access the web address ) Send a request to get the target file , And then to Client return .
2. Web Proxy Use
First , When we visit a website, in order to visit through proxy, we can't simply open the browser and enter the URL to visit ( That would be Client Direct to Web Server Transmit Reuest 了 ), Here you can download a file called Wget Tools for , This is for Web Proxy It's like jdk For Java The same thing ( Of course, there may be other tools that can access the proxy server first , There is no discussion about ), After downloading, you can unzip it and use it , It's like using jdk First, find the folder where the file is located in the command line window , If you do not want to input a list of directories to query each time, you can also add the path of this file to the environment variable ( How to configure self search ).
When Web Proxy and Wget When you're ready, you can start running :
First, execute Web Proxy The program , And then through Wget Request to use a proxy and deliver Request
(Wget command :wget xxx.xxx.xx -e use_proxy=on -e http_proxy=127.0.0.1:8000), among “xxx.xxx.xx” It's the URL you want to ask for
3. Web Proxy Source code
import socket def handleReq(clientSocket): # recv data # find the fileName # judge if the file named "fileName" if existed # if not exists, send req to get it recvData = clientSocket.recv(1024).decode() fileName = recvData.split()[1].split("//")[1].replace('/', '') print("fileName: " + fileName) try: file = open(fileName, 'rb') print("File is found in proxy server.") responseMsg = file.readlines() for i in range(0, len(responseMsg)): clientSocket.sendall(responseMsg[i]) print("Send, done.") except Exception: try: print("File is not exist.\nSend request to server...") proxyClientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serverName = fileName.split(":")[0] proxyClientSocket.connect((serverName, 80)) proxyClientSocket.sendall(recvData.encode()) responseMsg = proxyClientSocket.recv(4069) print("File is found in server.") proxyClientSocket.sendall(responseMsg) print("Send, done.") # cache cache = open("./" + fileName, 'w') cache.writelines(responseMsg.decode().replace('\r\n', '\n')) cache.close() print("Cache, done.") except: print("Connect timeout.") def startProxy(port): proxyServerSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) proxyServerSocket.bind(("", port)) proxyServerSocket.listen(0) while True: try: print("Proxy is waiting for connecting...") clientSocket, addr = proxyServerSocket.accept() print("Connect established") handleReq(clientSocket) clientSocket.close() except Exception as e: print("error: {0}".format(e)) break proxyServerSocket.close() if __name__ == '__main__': while True: try: port = int(input("choose a port number over 1024:")) except ValueError: print("Please input an integer rather than {0}".format(type(port))) continue else: if port <= 1024: print("Please input an integer greater than 1024") continue else: break startProxy(port)
4. Wget tool kit
Link to :https://pan.baidu.com/s/1Ae2_Cq9SYbKnfhhyJ1VhpQ
Extraction code :awsl
&n
版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
边栏推荐
- Flink的DataSource三部曲之二:内置connector
- Grouping operation aligned with specified datum
- Group count - word length
- 从海外进军中国,Rancher要执容器云市场牛耳 | 爱分析调研
- Flink on paasta: yelp's new stream processing platform running on kubernetes
- Process analysis of Python authentication mechanism based on JWT
- Elasticsearch 第六篇:聚合統計查詢
- Asp.Net Core learning notes: Introduction
- 給萌新HTML5 入門指南(二)
- 关于Kubernetes 与 OAM 构建统一、标准化的应用管理平台知识!(附网盘链接)
猜你喜欢
Grouping operation aligned with specified datum
中国提出的AI方法影响越来越大,天大等从大量文献中挖掘AI发展规律
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Filecoin主网上线以来Filecoin矿机扇区密封到底是什么意思
哇,ElasticSearch多字段权重排序居然可以这么玩
Elasticsearch database | elasticsearch-7.5.0 application construction
Network programming NiO: Bio and NiO
01 . Go语言的SSH远程终端及WebSocket
至联云分享:IPFS/Filecoin值不值得投资?
(1) ASP.NET Introduction to core3.1 Ocelot
随机推荐
Swagger 3.0 天天刷屏,真的香嗎?
条码生成软件如何隐藏部分条码文字
A debate on whether flv should support hevc
CCR炒币机器人:“比特币”数字货币的大佬,你不得不了解的知识
嘗試從零開始構建我的商城 (二) :使用JWT保護我們的資訊保安,完善Swagger配置
3分钟读懂Wi-Fi 6于Wi-Fi 5的优势
03_ Detailed explanation and test of installation and configuration of Ubuntu Samba
使用 Iceberg on Kubernetes 打造新一代云原生数据湖
谁说Cat不能做链路跟踪的,给我站出来
Installing the consult cluster
DTU连接经常遇到的问题有哪些
在大规模 Kubernetes 集群上实现高 SLO 的方法
Flink的DataSource三部曲之二:内置connector
Listening to silent words: hand in hand teaching you sign language recognition with modelarts
遞迴思想的巧妙理解
Serilog原始碼解析——使用方法
使用NLP和ML来提取和构造Web数据
Subordination judgment in structured data
至联云分享:IPFS/Filecoin值不值得投资?
Vue 3 responsive Foundation