Python服务器代理网站不重新加载

2024-04-25 21:52:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用socket和select库用Python构建了一个服务器代理。我遇到了一个问题:当代理准备好使用并且我重新加载一个网站时,它不会重新加载它。我从服务器上只得到3个头,客户机向服务器发送包含客户机头的变量“data”。如果你运行这个程序,你就能更好地理解。你知道吗

**HostFliter是一个函数,它获取头的第一行,并返回网站的域。你知道吗

import socket, select

def HostFliter(dataSplit):
    dataSplit = dataSplit[0]
    print dataSplit," datasplit"
    if dataSplit.split(" ")[0] == "GET" or dataSplit.split(" ")[0] == "POST":
        dataSplit = dataSplit.split(" ")[1]
        dataSplit = dataSplit.replace("http://","")
        if dataSplit.find('/') != -1:
            dataSplit = dataSplit.split('/')[0]
        return dataSplit
    else:
        return ""

clientSocket = socket.socket()
clientSocket.bind(('0.0.0.0', 80))
clientSocket.listen(100)
open_client_sockets = []

while True:
    rlist, wlist, xlist = select.select([clientSocket] + open_client_sockets, open_client_sockets, [])
    for currentSocket in rlist:
        if currentSocket is clientSocket:
            newSocket, addr = clientSocket.accept()
            open_client_sockets.append(newSocket)
        else:
            data = currentSocket.recv(4096)
            print data
            if data == "":
                currentSocket.send("")
                currentSocket.close()
                open_client_sockets.remove(currentSocket)
                print 'Conn is closed'
            else:
                dataSplit = data.split("\r\n")
                Host = HostFliter(dataSplit)
                print Host, " Host"
                if Host == "":
                    break
                serverSocket = socket.socket()
                serverSocket.connect((Host, 80))
                serverSocket.send(data)
                print "Sent to server"
                response = serverSocket.recv(4096)
                new_res = ""
                while len(new_res) > 0:
                    new_res = ""
                    new_res = serverSocket.recv(4096)
                    response += new_res
                currentSocket.send(response)
                print "Sent " + Host

谢谢你的帮助!!你知道吗


Tags: clienthostnewdataifressocketopen