Python 代理 - 需要帮助才能将 HTTP header 发送到浏览器

Python proxy - Need help to send HTTP header to the browser

我正在为我的项目制作代理,我正在尝试向浏览器 (Firefox) 发送 HTTP header 以继续我(代理服务器)和浏览器。问题是:当我刷新任何页面时,页面保持加载。我使用套接字和 select 作为代理:

import socket, select

#Sending a message for the waiting list
def send_Waiting_Messages(wlist):
    for msg in messages_to_send:
        clientSocket, data = msg
        if clientSocket in wlist:
            clientSocket.send('HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n')
            messages_to_send.remove(msg)

serverSocket = socket.socket()
serverSocket.bind(('0.0.0.0',8080))
serverSocket.listen(10)
open_client_sockets = []
messages_to_send = []

while True:
    rlist, wlist, xlist = select.select([serverSocket] + open_client_sockets, open_client_sockets, [])
    for currentSocket in rlist:
        if currentSocket is serverSocket:
            newSocket, addr = serverSocket.accept()
            open_client_sockets.append(newSocket)
        else:
            data = currentSocket.recv(1024)
            if data == "":
                open_client_sockets.remove(currentSocket)
                print 'Conn is closed'
            else:
                print data
                messages_to_send.append((currentSocket, 'Hello, ' + data))
    send_Waiting_Messages(wlist)

这些行:

clientSocket.send('HTTP/1.1 200 OK\r\n')
clientSocket.send('Content-Type: text/html\r\n\r\n')

用于发送header。

感谢帮助!!

请注意,每个 send_Waiting_Messages 函数都会向所有已连接的客户端发送相同的响应。当套接字位于 wlist.

时,我建议将其替换为基本发送功能

这可能有效

import socket, select
serverSocket = socket.socket()
serverSocket.bind(('0.0.0.0',8080))
serverSocket.listen(10)
open_client_sockets = []

while True:
    rlist, wlist, xlist = select.select([serverSocket] + open_client_sockets, open_client_sockets, [])
    for currentSocket in rlist:
        if currentSocket is serverSocket:
            newSocket, addr = serverSocket.accept()
            open_client_sockets.append(newSocket)
        else:
            data = currentSocket.recv(2048)
            if data == "":
                open_client_sockets.remove(currentSocket)
                print 'Conn is closed'
            else:
                print data
                content_to_send = "The content that you want to send"
                currentSocket.send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length:"+str(len(content_to_send))+"\r\n\r\n"+content_to_send)