当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- iptables基礎原理和使用簡介
- Jmeter——ForEach Controller&Loop Controller
- 遞迴思想的巧妙理解
- Can't be asked again! Reentrantlock source code, drawing a look together!
- 01 . Go语言的SSH远程终端及WebSocket
- Cocos Creator 原始碼解讀:引擎啟動與主迴圈
- 網路程式設計NIO:BIO和NIO
- How do the general bottom buried points do?
- C++和C++程序员快要被市场淘汰了
- Skywalking series blog 2-skywalking using
猜你喜欢
Troubleshooting and summary of JVM Metaspace memory overflow
從小公司進入大廠,我都做對了哪些事?
Examples of unconventional aggregation
ipfs正舵者Filecoin落地正当时 FIL币价格破千来了
多机器人行情共享解决方案
Computer TCP / IP interview 10 even asked, how many can you withstand?
网络安全工程师演示:原来***是这样获取你的计算机管理员权限的!【维持】
Subordination judgment in structured data
容联完成1.25亿美元F轮融资
条码生成软件如何隐藏部分条码文字
随机推荐
Listening to silent words: hand in hand teaching you sign language recognition with modelarts
容联完成1.25亿美元F轮融资
选择站群服务器的有哪些标准呢?
[performance optimization] Nani? Memory overflow again?! It's time to sum up the wave!!
Why do private enterprises do party building? ——Special subject study of geek state holding Party branch
Character string and memory operation function in C language
Working principle of gradient descent algorithm in machine learning
Subordination judgment in structured data
Troubleshooting and summary of JVM Metaspace memory overflow
嘗試從零開始構建我的商城 (二) :使用JWT保護我們的資訊保安,完善Swagger配置
Filecoin最新动态 完成重大升级 已实现四大项目进展!
PHP应用对接Justswap专用开发包【JustSwap.PHP】
钻石标准--Diamond Standard
Vuejs development specification
【新閣教育】窮學上位機系列——搭建STEP7模擬環境
Skywalking series blog 1 - install stand-alone skywalking
有关PDF417条码码制的结构介绍
多机器人行情共享解决方案
如果前端不使用SPA又能怎样?- Hacker News
华为云“四个可靠”的方法论