当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
猜你喜欢
PHPSHE 短信插件说明
How do the general bottom buried points do?
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
速看!互联网、电商离线大数据分析最佳实践!(附网盘链接)
怎么理解Python迭代器与生成器?
Filecoin最新动态 完成重大升级 已实现四大项目进展!
How long does it take you to work out an object-oriented programming interview question from Ali school?
This article will introduce you to jest unit test
阿里云Q2营收破纪录背后,云的打开方式正在重塑
使用NLP和ML来提取和构造Web数据
随机推荐
Introduction to Google software testing
有关PDF417条码码制的结构介绍
快快使用ModelArts,零基礎小白也能玩轉AI!
Filecoin最新动态 完成重大升级 已实现四大项目进展!
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
In depth understanding of the construction of Intelligent Recommendation System
使用NLP和ML来提取和构造Web数据
采购供应商系统是什么?采购供应商管理平台解决方案
Swagger 3.0 天天刷屏,真的香嗎?
3分钟读懂Wi-Fi 6于Wi-Fi 5的优势
How long does it take you to work out an object-oriented programming interview question from Ali school?
Working principle of gradient descent algorithm in machine learning
Synchronous configuration from git to consult with git 2consul
Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
制造和新的自动化技术是什么?
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
EOS创始人BM: UE,UBI,URI有什么区别?
Want to do read-write separation, give you some small experience
Asp.Net Core learning notes: Introduction
Polkadot series (2) -- detailed explanation of mixed consensus